diff --git a/system/libraries/Calendar.php b/system/libraries/Calendar.php
index 711d23b..fc65999 100644
--- a/system/libraries/Calendar.php
+++ b/system/libraries/Calendar.php
@@ -362,7 +362,7 @@
 	 * Get Day Names
 	 *
 	 * Returns an array of day names (Sunday, Monday, etc.) based
-	 * on the type. Options: long, short, abrev
+	 * on the type. Options: long, short, abr
 	 *
 	 * @param	string
 	 * @return	array
diff --git a/user_guide_src/source/_themes/eldocs/layout.html b/user_guide_src/source/_themes/eldocs/layout.html
index 7f2fe1a..535c2f1 100644
--- a/user_guide_src/source/_themes/eldocs/layout.html
+++ b/user_guide_src/source/_themes/eldocs/layout.html
@@ -31,7 +31,7 @@
 	    {%- for cssfile in css_files %}
 	    <link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" />
 	    {%- endfor %}
-	
+
     {%- if not embedded %}
 	    <script type="text/javascript">
 	      var DOCUMENTATION_OPTIONS = {
@@ -46,11 +46,13 @@
 	    <script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script>
 	    {%- endfor %}
 
+	    <script type="text/javascript" src="{{ pathto('_static/asset/js/method-toc.js', 1) }}"></script>
+
 	    {%- if favicon %}
 	    <link rel="shortcut icon" href="{{ pathto('_static/' + favicon, 1) }}"/>
 	    {%- endif %}
 	{%- endif %}
-	
+
 	{%- block linktags %}
 	    {%- if hasdoc('about') %}
 	    <link rel="author" title="{{ _('About these documents') }}" href="{{ pathto('about') }}" />
@@ -96,7 +98,7 @@
 				{%- block rootrellink %}
 				<li><a href="{{ pathto(master_doc) }}">User Guide Home</a>{%- if pagename != 'index' %}&nbsp;&nbsp;{{ reldelim1 }}{%- endif %}</li>
 				{%- endblock %}
-				
+
 				{%- for parent in parents %}
 				<li><a href="{{ parent.link|e }}" {% if loop.last %}{{ accesskey("U") }}{% endif %}>{{ parent.title }}</a>&nbsp;&nbsp; {{ reldelim1 }}</li>
 		        {%- endfor %}
@@ -117,8 +119,8 @@
 		{% if pagename not in exclude_comments -%}
 		<!-- {user_guide_comments} -->
 		{% endif %}
-	
-	{%- block footer %}			
+
+	{%- block footer %}
 		<div id="footer">
 			<p class="top"><a href="#header" title="Return to top">Return to top</a></p>
 			<p><a href="http://{{ project_domain }}/">{{ project }}</a> &ndash; Copyright &copy; {{ copyright }}</a></p>
diff --git a/user_guide_src/source/_themes/eldocs/static/asset/css/common.css b/user_guide_src/source/_themes/eldocs/static/asset/css/common.css
index 5cbb37f..962380b 100644
--- a/user_guide_src/source/_themes/eldocs/static/asset/css/common.css
+++ b/user_guide_src/source/_themes/eldocs/static/asset/css/common.css
@@ -22,7 +22,7 @@
 
 html, body,
 h1, h2, h3, h4, h5, h6,
-p, ul, ol, li, dl, dd, dt, pre, form, fieldset{ margin: 0; padding: 0; } 
+p, ul, ol, li, dl, dd, dt, pre, form, fieldset{ margin: 0; padding: 0; }
 
 body{ background-color: #F9F9F9; color: #444444; font: normal normal 14px "Helvetica", "Arial", Sans-Serif; }
 
@@ -34,10 +34,10 @@
 #table-contents .toctree-wrapper{ font-size: 12px; }
 
 dfn, var,
-em.dfn, em.var{ 
-	background-color: #FFFDED; 
-	color: #578236; 
-	font-style: italic; 
+em.dfn, em.var{
+	background-color: #FFFDED;
+	color: #578236;
+	font-style: italic;
 	padding: 3px;
 }
 
@@ -53,7 +53,7 @@
 
 h1, h2, h3, h4, h5, h6{ margin-bottom: 20px; }
 
-h2, h3{ border-bottom: 2px solid #EEEEEE; padding: 0 0 3px; }	
+h2, h3{ border-bottom: 2px solid #EEEEEE; padding: 0 0 3px; }
 
 h3{ border-color: #E5E5E5; border-width: 1px; }
 
@@ -62,7 +62,7 @@
 	h1 a, h2 a{ font-weight: normal; }
 
 	h1 a, h2 a, h3 a{ text-decoration: none; }
-	
+
 h3, h5, h6{ font-size: 18px; margin: 20px 0; }
 
 	h4, h5, h6{ font-size: 14px; }
@@ -75,57 +75,67 @@
 	li > ol{ margin: 0; margin-left: 40px; }
 
 	dl > dd{ margin-left: 20px; }
-	
+
 	li > p { margin: 0; }
 
 #expressionengine-user-guide li em { font-style: normal; }
 
 p, li, dd, dt, pre{ line-height: 1.5; }
 
-table{ 
+table{
 	background-color: #F5FBFF;
 	border: 1px solid #C8DEF0;
 	border-collapse: collapse;
 	margin-bottom: 20px;
 }
 
-	th, td{ 
-		border: 0; 
+	th, td{
+		border: 0;
 		border-bottom: 1px solid #C8DEF0;
-		padding: 8px; 
+		padding: 8px;
 	}
-	
-		th{ 
-			background-color: #326B95; 
+
+		th{
+			background-color: #326B95;
 			color: #FFFFFF;
-			text-align: left; 
+			text-align: left;
 		}
-	
+
 		td{ font-size: 12px; }
 
 	.descname{ color: #000080; font-weight: bold; }
 	.descclassname{ color: #094776; }
-	
+
 	.class .descname{ font-size: 18px; font-style: italic; }
 	.method .descname{ font-style: normal; }
-	
+
 	.class .property{ color: #094776; }
-	
+
 	.method big,
-	.method .optional{ color: #094776; padding: 0 4px 0 6px; }
-	
+	.method .optional
+	.function big,
+	.function .optional{ color: #094776; padding: 0 4px 0 6px; }
+
 	.class em,
-	.method em{ color: #008080; }
-	
-	.method dt{ margin: 20px 0; }
-		
-	.method table{ margin-bottom: 0; margin-left: 20px; }
-	
+	.method em,
+	.function em{ color: #008080; }
+
+	.method dt,
+	.function dt{ margin: 20px 0; }
+
+	.method table,
+	.function table{ margin-bottom: 0; margin-left: 20px; }
+
 	.method th,
-	.method td{ padding: 10px; }
-	
-	.method td > ul{ margin: 0; margin-left: 20px; }
-	.method td.field-body > p { margin: 0; margin-left: 20px; }
+	.method td,
+	.function th,
+	.function td{ padding: 10px; }
+
+	.method td > ul,
+	.function td > ul{ margin: 0; margin-left: 20px; }
+
+	.method td.field-body > p,
+	.function td.field-body > p { margin: 0; margin-left: 20px; }
 
 a:link,
 a:visited{ color: #1A5B8D; }
@@ -137,7 +147,7 @@
 
 	:hover > a.headerlink { visibility: visible; }
 
-a img{ 
+a img{
 	border: 0;
 	outline: 0;
 }
@@ -157,37 +167,38 @@
 .highlight-bash,
 .highlight-perl,
 .highlight-php,
+.highlight-html,
 .cp-path,
-.codeblock{ 
-	background-color: #F9FEFF; 
-	border: 1px solid #C8DEF0; 
+.codeblock{
+	background-color: #F9FEFF;
+	border: 1px solid #C8DEF0;
 	-moz-box-shadow: 4px 4px 0 rgba(0,0,0,0.03);
 	-webkit-box-shadow: 4px 4px 0 rgba(0,0,0,0.03);
 	box-shadow: 4px 4px 0 rgba(0,0,0,0.03);
-	margin: 20px 0; 
-	padding: 10px 10px 8px; 
+	margin: 20px 0;
+	padding: 10px 10px 8px;
 }
 
 .highlight-ci{ background-color: #FEFEFE; border-color: #E5E5E5; }
 
 	.admonition p{ margin: 0; }
-	
+
 	.codeblock{ margin: 10px 0; }
-	
+
 	.cp-path{ background-color: #FAFFF6; border-color: #D1CDB0; }
 	.important, .note{ background-color: #FFFFF2; border-color: #C8C8A5; }
-	
-.admonition-title{ 
+
+.admonition-title{
 	float: left;
-	font-weight: bold;  
-	padding-right: 4px; 
-	text-transform: uppercase; 
+	font-weight: bold;
+	padding-right: 4px;
+	text-transform: uppercase;
 }
 
 .admonition-title:after{ content: ':  '; }
 
 .highlighted{ background-color: #FFF09B; }
-	
+
 #table-contents{
 	bottom: 0;
 	left: -520px;
@@ -195,7 +206,7 @@
 	top: 0;
 }
 
-#table-contents .toctree-wrapper{ 
+#table-contents .toctree-wrapper{
 	background-color: #444444;
 	background-color: rgba(0,0,0,0.9);
 	*+background-color: #444444;
@@ -209,16 +220,16 @@
 }
 
 	#table-contents .toctree-wrapper ul{margin-bottom: 0; margin-top: 0; }
-	
+
 		#table-contents .toctree-wrapper li{ color: #999999; line-height: 1.7; padding: 1px 0; }
-		
+
 			#table-contents .toctree-l1{ list-style-type: none; }
-		
-			#table-contents .toctree-l1 > a{ 
-				background: transparent url(../../asset/img/paper-ico.gif) no-repeat 0 0; 
-				font-size: 14px; 
+
+			#table-contents .toctree-l1 > a{
+				background: transparent url(../../asset/img/paper-ico.gif) no-repeat 0 0;
+				font-size: 14px;
 				font-weight: bold;
-				padding-left: 20px; 
+				padding-left: 20px;
 			}
 
 	#header a:link,
@@ -233,15 +244,15 @@
 
 #content{ background-color: #FFFFFF; padding: 40px 40px 20px; }
 
-#brand{ 
-	background-color: #F5F5F5; 
-	color: #FFFFFF; 
+#brand{
+	background-color: #F5F5F5;
+	color: #FFFFFF;
 	overflow: hidden;
-	padding: 10px 20px 13px; 
+	padding: 10px 20px 13px;
 }
 
 	#brand > *{ float: left; }
-	
+
 	#brand p{ font-size: 14px; margin: 2px 0 0 5px; }
 	#brand.ci p{ margin-top: 8px; }
 
@@ -250,16 +261,16 @@
 	#brand.mm{ background-color: #222627; }
 	#brand.el{ background-color: #4A0202; }
 
-#header{ 
+#header{
 	background-color: #3B7EB0;
 	border-top: 2px solid #539ECC;
-	color: #FFFFFF; 
-	overflow: hidden; 
-	padding: 15px 15px 16px 20px; 
+	color: #FFFFFF;
+	overflow: hidden;
+	padding: 15px 15px 16px 20px;
 }
 
 	#header form{ float: right; overflow: hidden; }
-	
+
 	#header input{ float: left; }
 
 	#header input[type="text"]{
@@ -271,9 +282,9 @@
 		padding: 5px;
 		width: 175px;
 	}
-	
+
 		#header input[type="text"]:focus{ background-color: #FFFDED; outline: 0; }
-		
+
 	#header input[type="submit"]{
 		background: #F0F9FF url(../../asset/img/grades.gif) repeat-x 0 -58px;
 		border: 1px solid #033861;
@@ -284,18 +295,18 @@
 		padding: 5px 10px;
 		text-transform: uppercase;
 	}
-	
+
 		#header input[type="submit"]:hover{ background-position: 0 -83px; }
-	
-	#header ul{ 
+
+	#header ul{
 		float: left;
 		list-style-type: none;
-		margin: 0; 
+		margin: 0;
 		overflow: hidden;
 	}
-	
+
 		#header li{ float: left; margin: 4px 5px 0 0; }
-		
+
 #footer{ background-color: #F9F9F9; border-top: 1px solid #CCCCCC; padding: 20px; }
 
 	#footer p{ margin: 0; }
@@ -323,8 +334,8 @@
 	-webkit-box-sizing: border-box;
 	box-sizing: border-box;
 	margin-bottom: 10px;
-	resize: none; 
-	width: 100%; 
+	resize: none;
+	width: 100%;
 }
 
 #comment_form input[type="submit"]{ margin-top: 10px; }
@@ -350,4 +361,4 @@
 	h3,h4,h5,h6{ font-size: 14px; }
 }
 
-#header input[type="submit"], x:-moz-any-link{ padding: 4px 10px; }
\ No newline at end of file
+#header input[type="submit"], x:-moz-any-link{ padding: 4px 10px; }
diff --git a/user_guide_src/source/_themes/eldocs/static/asset/js/method-toc.js b/user_guide_src/source/_themes/eldocs/static/asset/js/method-toc.js
new file mode 100644
index 0000000..a926b3d
--- /dev/null
+++ b/user_guide_src/source/_themes/eldocs/static/asset/js/method-toc.js
@@ -0,0 +1,44 @@
+/* modified from http://stackoverflow.com/a/12459801 */
+$(function (){
+    var createList = function(selector){
+
+        var ul = $('<ul>');
+        var selected = $(selector);
+
+        if (selected.length === 0){
+            return;
+        }
+
+        selected.clone().each(function (i,e){
+
+            var p = $(e).children('.descclassname');
+            var n = $(e).children('.descname');
+            var l = $(e).children('.headerlink');
+
+            var a = $('<a>');
+            a.attr('href',l.attr('href')).attr('title', 'jump to ' + n + '()');
+
+            a.append(p).append(n);
+
+            var entry = $('<li>').append(a);
+            ul.append(entry);
+        });
+        return ul;
+    }
+
+    var c = $('<div>');
+
+    var ul0 = c.clone().append($('.submodule-index'))
+
+    customIndex = $('.custom-index');
+    customIndex.empty();
+    customIndex.append(ul0);
+
+    var l = createList('dl.method > dt, dl.function > dt');
+    if (l) {
+        var ul = c.clone()
+            .append('<h3>Methods / Functions</h3>')
+            .append(l);
+    }
+    customIndex.append(ul);
+});
\ No newline at end of file
diff --git a/user_guide_src/source/changelog.rst b/user_guide_src/source/changelog.rst
index c68258e..cd1998b 100644
--- a/user_guide_src/source/changelog.rst
+++ b/user_guide_src/source/changelog.rst
@@ -65,21 +65,21 @@
 
    -  :doc:`Date Helper <helpers/date_helper>` changes include:
 
-      - :php:func:`now()` now works with all timezone strings supported by PHP.
-      - Added an optional third parameter to :php:func:`timespan()` that constrains the number of time units displayed.
-      - Added an optional parameter to :php:func:`timezone_menu()` that allows more attributes to be added to the generated select tag.
+      - :func:`now()` now works with all timezone strings supported by PHP.
+      - Added an optional third parameter to :func:`timespan()` that constrains the number of time units displayed.
+      - Added an optional parameter to :func:`timezone_menu()` that allows more attributes to be added to the generated select tag.
       - Deprecated ``standard_date()``, which now just uses the native ``date()`` with `DateTime constants <http://www.php.net/manual/en/class.datetime.php#datetime.constants.types>`_.
-      - Added function :php:func:`date_range()` that generates a list of dates between a specified period.
+      - Added function :func:`date_range()` that generates a list of dates between a specified period.
 
    -  :doc:`URL Helper <helpers/url_helper>` changes include:
 
-      - Deprecated *separator* options **dash** and **underscore** for function :php:func:`url_title()` (they are only aliases for '-' and '_' respectively).
-      - :php:func:`url_title()` will now trim extra dashes from beginning and end.
-      - :php:func:`anchor_popup()` will now fill the *href* attribute with the URL and its JS code will return FALSE instead.
-      - Added JS window name support to the :php:func:`anchor_popup()` function.
-      - Added support (auto-detection) for HTTP/1.1 response codes 303, 307 in :php:func:`redirect()`.
-      - Changed :php:func:`redirect()` to choose the **refresh** method only on IIS servers, instead of all servers on Windows (when **auto** is used).
-      - Changed :php:func:`anchor()`, :php:func:`anchor_popup()`, and :php:func:`redirect()` to support protocol-relative URLs (e.g. *//ellislab.com/codeigniter*).
+      - Deprecated *separator* options **dash** and **underscore** for function :func:`url_title()` (they are only aliases for '-' and '_' respectively).
+      - :func:`url_title()` will now trim extra dashes from beginning and end.
+      - :func:`anchor_popup()` will now fill the *href* attribute with the URL and its JS code will return FALSE instead.
+      - Added JS window name support to the :func:`anchor_popup()` function.
+      - Added support (auto-detection) for HTTP/1.1 response codes 303, 307 in :func:`redirect()`.
+      - Changed :func:`redirect()` to choose the **refresh** method only on IIS servers, instead of all servers on Windows (when **auto** is used).
+      - Changed :func:`anchor()`, :func:`anchor_popup()`, and :func:`redirect()` to support protocol-relative URLs (e.g. *//ellislab.com/codeigniter*).
 
    -  :doc:`HTML Helper <helpers/html_helper>` changes include:
 
@@ -89,24 +89,24 @@
 
    -  :doc:`Inflector Helper <helpers/inflector_helper>` changes include:
 
-      - Changed :php:func:`humanize()` to allow passing an input separator as its second parameter.
-      - Refactored :php:func:`plural()` and :php:func:`singular()` to avoid double pluralization and support more words.
+      - Changed :func:`humanize()` to allow passing an input separator as its second parameter.
+      - Refactored :func:`plural()` and :func:`singular()` to avoid double pluralization and support more words.
 
    -  :doc:`Download Helper <helpers/download_helper>` changes include:
 
-      - Added an optional third parameter to :php:func:`force_download()` that enables/disables sending the actual file MIME type in the Content-Type header (disabled by default).
-      - Added a work-around in :php:func:`force_download()` for a bug Android <= 2.1, where the filename extension needs to be in uppercase.
-      - Added support for reading from an existing file path by passing NULL as the second parameter to :php:func:`force_download()` (useful for large files and/or safely transmitting binary data).
+      - Added an optional third parameter to :func:`force_download()` that enables/disables sending the actual file MIME type in the Content-Type header (disabled by default).
+      - Added a work-around in :func:`force_download()` for a bug Android <= 2.1, where the filename extension needs to be in uppercase.
+      - Added support for reading from an existing file path by passing NULL as the second parameter to :func:`force_download()` (useful for large files and/or safely transmitting binary data).
 
    -  :doc:`Form Helper <helpers/form_helper>` changes include:
 
-      - :php:func:`form_dropdown()` will now also take an array for unity with other form helpers.
-      - :php:func:`form_prep()`'s second argument now only accepts a boolean value, which determines whether the value is escaped for a <textarea> or a regular <input> element.
+      - :func:`form_dropdown()` will now also take an array for unity with other form helpers.
+      - :func:`form_prep()`'s second argument now only accepts a boolean value, which determines whether the value is escaped for a <textarea> or a regular <input> element.
 
    -  :doc:`Security Helper <helpers/security_helper>` changes include:
 
-      - :php:func:`do_hash()` now uses PHP's native ``hash()`` function (supporting more algorithms) and is deprecated.
-      - :php:func:`strip_image_tags()` is now an alias for the same method in the :doc:`Security Library <libraries/security>`.
+      - :func:`do_hash()` now uses PHP's native ``hash()`` function (supporting more algorithms) and is deprecated.
+      - :func:`strip_image_tags()` is now an alias for the same method in the :doc:`Security Library <libraries/security>`.
 
    -  :doc:`Smiley Helper <helpers/smiley_helper>` changes include:
 
@@ -116,15 +116,15 @@
 
    -  :doc:`File Helper <helpers/file_helper>` changes include:
 
-      - :php:func:`set_realpath()` can now also handle file paths as opposed to just directories.
-      - Added an optional paramater to :php:func:`delete_files()` to enable it to skip deleting files such as *.htaccess* and *index.html*.
+      - :func:`set_realpath()` can now also handle file paths as opposed to just directories.
+      - Added an optional paramater to :func:`delete_files()` to enable it to skip deleting files such as *.htaccess* and *index.html*.
       - Deprecated function ``read_file()`` - it's just an alias for PHP's native ``file_get_contents()``.
 
    -  :doc:`String Helper <helpers/string_helper>` changes include:
 
       - Deprecated function ``repeater()`` - it's just an alias for PHP's native ``str_repeat()``.
       - Deprecated function ``trim_slashes()`` - it's just an alias for PHP's native ``trim()`` (with a slash as its second argument).
-      - Deprecated randomization type options **unique** and **encrypt** for funcion :php:func:`random_string()` (they are only aliases for **md5** and **sha1** respectively).
+      - Deprecated randomization type options **unique** and **encrypt** for funcion :func:`random_string()` (they are only aliases for **md5** and **sha1** respectively).
 
    -  :doc:`CAPTCHA Helper <helpers/captcha_helper>` changes include:
 
@@ -443,14 +443,14 @@
 
    -  :doc:`Common functions <general/common_functions>` changes include:
 
-      -  Added function :php:func:`get_mimes()` to return the *application/config/mimes.php* array.
-      -  Added support for HTTP code 303 ("See Other") in :php:func:`set_status_header()`.
-      -  Removed redundant conditional to determine HTTP server protocol in :php:func:`set_status_header()`.
+      -  Added function :func:`get_mimes()` to return the *application/config/mimes.php* array.
+      -  Added support for HTTP code 303 ("See Other") in :func:`set_status_header()`.
+      -  Removed redundant conditional to determine HTTP server protocol in :func:`set_status_header()`.
       -  Changed ``_exception_handler()`` to respect php.ini *display_errors* setting.
-      -  Added function :php:func:`is_https()` to check if a secure connection is used.
-      -  Added function :php:func:`is_cli()` to replace the ``CI_Input::is_cli_request()`` method.
-      -  Added function :php:func:`function_usable()` to check if a function exists and is not disabled by `Suhosin <http://www.hardened-php.net/suhosin/>`.
-      -  Removed the third (`$php_error`) from function :php:func:`log_message()`.
+      -  Added function :func:`is_https()` to check if a secure connection is used.
+      -  Added function :func:`is_cli()` to replace the ``CI_Input::is_cli_request()`` method.
+      -  Added function :func:`function_usable()` to check if a function exists and is not disabled by `Suhosin <http://www.hardened-php.net/suhosin/>`.
+      -  Removed the third (`$php_error`) from function :func:`log_message()`.
 
    -  :doc:`Output Library <libraries/output>` changes include:
 
@@ -497,13 +497,13 @@
 -  Fixed a bug (#181) where a mis-spelling was in the form validation language file.
 -  Fixed a bug (#159, #163) - :doc:`Query Builder <database/query_builder>` nested transactions didn't work properly due to ``_trans_depth`` not being incremented.
 -  Fixed a bug (#737, #75) - :doc:`Pagination <libraries/pagination>` anchor class was not set properly when using initialize method.
--  Fixed a bug (#419) - :php:func:`auto_link()` didn't recognize URLs that come after a word boundary.
+-  Fixed a bug (#419) - :func:`auto_link()` didn't recognize URLs that come after a word boundary.
 -  Fixed a bug (#724) - :doc:`Form Validation Library <libraries/form_validation>` rule **is_unique** didn't check if a database connection exists.
 -  Fixed a bug (#647) - :doc:`Zip Library <libraries/zip>` internal method ``_get_mod_time()`` didn't suppress possible "stat failed" errors generated by ``filemtime()``.
 -  Fixed a bug (#157, #174) - :doc:`Image Manipulation Library <libraries/image_lib>` method ``clear()`` didn't completely clear properties.
 -  Fixed a bug where :doc:`Database Forge <database/forge>` method ``create_table()`` with PostgreSQL database could lead to fetching the whole table.
--  Fixed a bug (#795) - :doc:`Form Helper <helpers/form_helper>` :php:func:`form_open()` didn't add the default form *method* and *accept-charset* when an empty array is passed to it.
--  Fixed a bug (#797) - :php:func:`timespan()` was using incorrect seconds for year and month.
+-  Fixed a bug (#795) - :doc:`Form Helper <helpers/form_helper>` :func:`form_open()` didn't add the default form *method* and *accept-charset* when an empty array is passed to it.
+-  Fixed a bug (#797) - :func:`timespan()` was using incorrect seconds for year and month.
 -  Fixed a bug in CI_Cart::contents() where if called without a TRUE (or equal) parameter, it would fail due to a typo.
 -  Fixed a bug (#696) - make oci_execute() calls inside num_rows() non-committing, since they are only there to reset which row is next in line for oci_fetch calls and thus don't need to be committed.
 -  Fixed a bug (#406) - SQLSRV DB driver not returning resource on ``db_pconnect()``.
@@ -630,7 +630,7 @@
 -  Fixed a bug - :doc:`Routing Library <general/routing>` didn't properly handle *default_controller* in a subdirectory when a method is also specified.
 -  Fixed a bug (#953) - :doc:`post_controller_constructor hook <general/hooks>` wasn't called with a *404_override*.
 -  Fixed a bug (#1220) - :doc:`Profiler Library <general/profiling>` didn't display information for database objects that are instantiated inside models.
--  Fixed a bug (#1978) - :doc:`Directory Helper <helpers/directory_helper>` function :php:func:`directory_map()`'s return array didn't make a distinction between directories and file indexes when a directory with a numeric name is present.
+-  Fixed a bug (#1978) - :doc:`Directory Helper <helpers/directory_helper>` function :func:`directory_map()`'s return array didn't make a distinction between directories and file indexes when a directory with a numeric name is present.
 -  Fixed a bug (#777) - :doc:`Loader Library <libraries/loader>` didn't look for helper extensions in added package paths.
 -  Fixed a bug (#18) - :doc:`APC Cache <libraries/caching>` driver didn't (un)serialize data, resulting in failure to store objects.
 -  Fixed a bug (#188) - :doc:`Unit Testing Library <libraries/unit_testing>` filled up logs with error messages for non-existing language keys.
@@ -652,9 +652,9 @@
 -  Fixed a bug (#2388) - :doc:`Email Library <libraries/email>` used to ignore attachment errors, resulting in broken emails being sent.
 -  Fixed a bug (#2498) - :doc:`Form Validation Library <libraries/form_validation>` rule **valid_base64** only checked characters instead of actual validity.
 -  Fixed a bug (#2425) - OCI8 :doc:`database <database/index>` driver's method ``stored_procedure()`` didn't log an error unless **db_debug** was set to TRUE.
--  Fixed a bug (#2490) - :doc:`Database Class <database/queries>` method ``query()`` returning boolean instead of a result object when the PostgreSQL-specific *RETURNING* clause is used.
+-  Fixed a bug (#2490) - :doc:`Database Class <database/queries>` method ``query()`` returning boolean instead of a result object for PostgreSQL-specific *INSERT INTO ... RETURNING* statements.
 -  Fixed a bug (#249) - :doc:`Cache Library <libraries/caching>` didn't properly handle Memcache(d) configurations with missing options.
--  Fixed a bug (#180) - :php:func:`config_item()` didn't take into account run-time configuration changes.
+-  Fixed a bug (#180) - :func:`config_item()` didn't take into account run-time configuration changes.
 -  Fixed a bug (#2551) - :doc:`Loader Library <libraries/loader>` method ``library()`` didn't properly check if a class that is being loaded already exists.
 -  Fixed a bug (#2560) - :doc:`Form Helper <helpers/form_helper>` function :php:func:`form_open()` set the 'method="post"' attribute only if the passed attributes equaled an empty string.
 -  Fixed a bug (#2585) - :doc:`Query Builder <database/query_builder>` methods ``min()``, ``max()``, ``avg()``, ``sum()`` didn't escape field names.
diff --git a/user_guide_src/source/documentation/index.rst b/user_guide_src/source/documentation/index.rst
index e977566..43afe6f 100644
--- a/user_guide_src/source/documentation/index.rst
+++ b/user_guide_src/source/documentation/index.rst
@@ -8,12 +8,28 @@
 on readability, user friendliness, and an "I've got your hand, baby" feel.
 While they can be quite technical, we always write for humans!
 
-A table of contents should always be included like the one below.
-It is created automatically by inserting the ``.. contents::``
-directive on a line by itself.
+A local table of contents should always be included like the one below.
+It is created automatically by inserting the the following:
 
-.. contents:: Page Contents
+::
 
+	.. contents::
+		:local:
+
+	.. raw:: html
+
+  	<div class="custom-index container"></div>
+
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
+The <div> that is inserted as raw HTML is a hook for the documentation's
+JavaScript to dynamically add links to any function and method definitions
+contained in the current page.
 
 **************
 Tools Required
@@ -50,39 +66,39 @@
 	- for subsubsections
 	^ for subsubsubsections
 	" for subsubsubsubsections (!)
-	
+
 The :download:`TextMate ELDocs Bundle <./ELDocs.tmbundle.zip>` can help you
 create these with the following tab triggers::
 
 	title->
-	
+
 		##########
 		Page Title
 		##########
 
 	sec->
-	
+
 		*************
 		Major Section
 		*************
-		
+
 	sub->
-	
+
 		Subsection
 		==========
-		
+
 	sss->
-	
+
 		SubSubSection
 		-------------
-		
+
 	ssss->
-	
+
 		SubSubSubSection
 		^^^^^^^^^^^^^^^^
-		
+
 	sssss->
-	
+
 		SubSubSubSubSection (!)
 		"""""""""""""""""""""""
 
@@ -99,12 +115,9 @@
 
 .. code-block:: rst
 
-	.. php:class:: Some_class
+	.. class:: Some_class
 
-	some_method()
-	=============
-
-		.. php:method:: some_method ( $foo [, $bar [, $bat]])
+		.. method:: some_method ( $foo [, $bar [, $bat]])
 
 			This function will perform some action. The ``$bar`` array must contain
 			a something and something else, and along with ``$bat`` is an optional
@@ -115,7 +128,7 @@
 			:param bool $bat: whether or not to do something
 			:returns: FALSE on failure, TRUE if successful
 			:rtype: Boolean
-		
+
 			::
 
 				$this->load->library('some_class');
@@ -131,16 +144,14 @@
 				{
 					show_error('An Error Occurred Doing Some Method');
 				}
-		
+
 			.. note:: Here is something that you should be aware of when using some_method().
 					For real.
-					
+
 			See also :php:meth:`Some_class::should_do_something`
 
-	should_do_something()
-	=====================
 
-		.. php:method:: should_do_something()
+		.. method:: should_do_something()
 
 			:returns: whether or something should be done or not
 			:rtype: Boolean
@@ -148,12 +159,10 @@
 
 It creates the following display:
 
-.. php:class:: Some_class
+.. class:: Some_class
 
-some_method()
-=============
 
-	.. php:method:: some_method ( $foo [, $bar [, $bat]])
+	.. method:: some_method ( $foo [, $bar [, $bat]])
 
 		This function will perform some action. The ``$bar`` array must contain
 		a something and something else, and along with ``$bat`` is an optional
@@ -164,7 +173,7 @@
 		:param bool $bat: whether or not to do something
 		:returns: FALSE on failure, TRUE if successful
 		:rtype: Boolean
-		
+
 		::
 
 			$this->load->library('some_class');
@@ -180,16 +189,14 @@
 			{
 				show_error('An Error Occurred Doing Some Method');
 			}
-		
+
 		.. note:: Here is something that you should be aware of when using some_method().
 				For real.
-				
+
 		See also :php:meth:`Some_class::should_do_something`
 
-should_do_something()
-=====================
 
-	.. php:method:: should_do_something()
+	.. method:: should_do_something()
 
 		:returns: whether or something should be done or not
 		:rtype: Boolean
diff --git a/user_guide_src/source/general/ancillary_classes.rst b/user_guide_src/source/general/ancillary_classes.rst
index 5dc058a..edb3a14 100644
--- a/user_guide_src/source/general/ancillary_classes.rst
+++ b/user_guide_src/source/general/ancillary_classes.rst
@@ -9,7 +9,7 @@
 get_instance()
 ==============
 
-.. php:function:: get_instance()
+.. function:: get_instance()
 
 	:returns:	object of class CI_Controller
 
@@ -48,7 +48,7 @@
 	passed by reference::
 
 		$CI =& get_instance();
-	
+
 	This is very important. Assigning by reference allows you to use the
 	original CodeIgniter object rather than creating a copy of it.
 
diff --git a/user_guide_src/source/general/common_functions.rst b/user_guide_src/source/general/common_functions.rst
index a1007cb..65ca026 100644
--- a/user_guide_src/source/general/common_functions.rst
+++ b/user_guide_src/source/general/common_functions.rst
@@ -6,200 +6,167 @@
 defined, and are available to you at any point. These do not require
 loading any libraries or helpers.
 
-is_php()
-========
+.. contents::
+  :local:
 
-.. php:function:: is_php($version = '5.3.0')
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
+.. function:: is_php([$version = '5.3.0'])
 
 	:param	string	$version: Version number
 	:returns:	bool
 
-Determines of the PHP version being used is greater than the
-supplied version number.
+	Determines of the PHP version being used is greater than the
+	supplied version number.
 
-Example::
+	Example::
 
-	if (is_php('5.3'))
-	{
-		$str = quoted_printable_encode($str);
-	}
+		if (is_php('5.3'))
+		{
+			$str = quoted_printable_encode($str);
+		}
 
-Returns boolean TRUE if the installed version of PHP is equal to or
-greater than the supplied version number. Returns FALSE if the installed
-version of PHP is lower than the supplied version number.
+	Returns boolean TRUE if the installed version of PHP is equal to or
+	greater than the supplied version number. Returns FALSE if the installed
+	version of PHP is lower than the supplied version number.
 
-is_really_writable()
-====================
+	.. function:: is_really_writable($file)
 
-.. php:function:: is_really_writable($file)
+		:param	string	$file: File path
+		:returns:	bool
 
-	:param	string	$file: File path
-	:returns:	bool
+	``is_writable()`` returns TRUE on Windows servers when you really can't
+	write to the file as the OS reports to PHP as FALSE only if the
+	read-only attribute is marked.
 
-``is_writable()`` returns TRUE on Windows servers when you really can't
-write to the file as the OS reports to PHP as FALSE only if the
-read-only attribute is marked.
+	This function determines if a file is actually writable by attempting
+	to write to it first. Generally only recommended on platforms where
+	this information may be unreliable.
 
-This function determines if a file is actually writable by attempting
-to write to it first. Generally only recommended on platforms where
-this information may be unreliable.
+	Example::
 
-Example::
+		if (is_really_writable('file.txt'))
+		{
+			echo "I could write to this if I wanted to";
+		}
+		else
+		{
+			echo "File is not writable";
+		}
 
-	if (is_really_writable('file.txt'))
-	{
-		echo "I could write to this if I wanted to";
-	}
-	else
-	{
-		echo "File is not writable";
-	}
-
-config_item()
-=============
-
-.. php:function:: config_item($key)
+.. function:: config_item($key)
 
 	:param	string	$key: Config item key
 	:returns:	mixed
 
-The :doc:`Config Library <../libraries/config>` is the preferred way of
-accessing configuration information, however ``config_item()`` can be used
-to retrieve single keys. See :doc:`Config Library <../libraries/config>`
-documentation for more information.
+	The :doc:`Config Library <../libraries/config>` is the preferred way of
+	accessing configuration information, however ``config_item()`` can be used
+	to retrieve single keys. See :doc:`Config Library <../libraries/config>`
+	documentation for more information.
 
-show_error()
-============
-
-.. :noindex: php:function:: show_error($message, $status_code, $heading = 'An Error Was Encountered')
+.. :noindex: function:: show_error($message, $status_code[, $heading = 'An Error Was Encountered'])
 
 	:param	mixed	$message: Error message
 	:param	int	$status_code: HTTP Response status code
 	:param	string	$heading: Error page heading
 	:returns:	void
 
-This function calls ``CI_Exception::show_error()``. For more info,
-please see the :doc:`Error Handling <errors>` documentation.
+	This function calls ``CI_Exception::show_error()``. For more info,
+	please see the :doc:`Error Handling <errors>` documentation.
 
-show_404()
-==========
-
-.. :noindex: php:function:: show_404($page = '', $log_error = TRUE)
+.. :noindex: function:: show_404([$page = ''[, $log_error = TRUE]])
 
 	:param	string	$page: URI string
 	:param	bool	$log_error: Whether to log the error
 	:returns:	void
 
-This function calls ``CI_Exception::show_404()``. For more info,
-please see the :doc:`Error Handling <errors>` documentation.
+	This function calls ``CI_Exception::show_404()``. For more info,
+	please see the :doc:`Error Handling <errors>` documentation.
 
-log_message()
-=============
-
-.. :noindex: php:function:: log_message($level, $message)
+.. :noindex: function:: log_message($level, $message)
 
 	:param	string	$level: Log level: 'error', 'debug' or 'info'
 	:param	string	$message: Message to log
 	:returns:	void
 
-This function is an alias for ``CI_Log::write_log()``. For more info,
-please see the :doc:`Error Handling <errors>` documentation.
+	This function is an alias for ``CI_Log::write_log()``. For more info,
+	please see the :doc:`Error Handling <errors>` documentation.
 
-set_status_header()
-===============================
-
-.. php:function:: set_status_header($code, $text = '')
+.. function:: set_status_header($code[, $text = ''])
 
 	:param	int	$code: HTTP Reponse status code
 	:param	string	$text: A custom message to set with the status code
 	:returns:	void
 
-Permits you to manually set a server status header. Example::
+	Permits you to manually set a server status header. Example::
 
-	set_status_header(401);
-	// Sets the header as:  Unauthorized
+		set_status_header(401);
+		// Sets the header as:  Unauthorized
 
-`See here <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html>`_ for
-a full list of headers.
+	`See here <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html>`_ for
+	a full list of headers.
 
-remove_invisible_characters()
-=============================
-
-.. php:function:: remove_invisible_characters($str, $url_encoded = TRUE)
+.. function:: remove_invisible_characters($str[, $url_encoded = TRUE])
 
 	:param	string	$str: Input string
 	:param	bool	$url_encoded: Whether to remove URL-encoded characters as well
 	:returns:	string
 
-This function prevents inserting NULL characters between ASCII
-characters, like Java\\0script.
+	This function prevents inserting NULL characters between ASCII
+	characters, like Java\\0script.
 
-Example::
+	Example::
 
-	remove_invisible_characters('Java\\0script');
-	// Returns: 'Javascript'
+		remove_invisible_characters('Java\\0script');
+		// Returns: 'Javascript'
 
-html_escape()
-=============
+.. function:: html_escape($var)
 
-.. php:function:: html_escape($var)
-
-	:param	mixed	$var: Variable to escape
-			(string or array)
+	:param	mixed	$var: Variable to escape (string or array)
 	:returns:	mixed
 
-This function acts as an alias for PHP's native ``htmlspecialchars()``
-function, with the advantage of being able to accept an array of strings.
+	This function acts as an alias for PHP's native ``htmlspecialchars()``
+	function, with the advantage of being able to accept an array of strings.
 
-It is useful in preventing Cross Site Scripting (XSS).
+	It is useful in preventing Cross Site Scripting (XSS).
 
-get_mimes()
-===========
-
-.. php:function:: get_mimes()
+.. function:: get_mimes()
 
 	:returns:	array
 
-This function returns a *reference* to the MIMEs array from
-*application/config/mimes.php*.
+	This function returns a *reference* to the MIMEs array from
+	*application/config/mimes.php*.
 
-is_https()
-==========
-
-.. php:function:: is_https()
+.. function:: is_https()
 
 	:returns:	bool
 
-Returns TRUE if a secure (HTTPS) connection is used and FALSE
-in any other case (including non-HTTP requests).
+	Returns TRUE if a secure (HTTPS) connection is used and FALSE
+	in any other case (including non-HTTP requests).
 
-is_cli()
-========
-
-.. php:function:: is_cli()
+.. function:: is_cli()
 
 	:returns:	bool
 
-Returns TRUE if the application is run through the command line
-and FALSE if not.
+	Returns TRUE if the application is run through the command line
+	and FALSE if not.
 
-.. note:: This function checks both if the ``PHP_SAPI`` value is 'cli'
-	or if the ``STDIN`` constant is defined.
+	.. note:: This function checks both if the ``PHP_SAPI`` value is 'cli'
+		or if the ``STDIN`` constant is defined.
 
-function_usable()
-=================
-
-.. php:function:: function_usable($function_name)
+.. function:: function_usable($function_name)
 
 	:param	string	$function_name: Function name
 	:returns:	bool
 
-Returns TRUE if a function exists and is usable, FALSE otherwise.
+	Returns TRUE if a function exists and is usable, FALSE otherwise.
 
-This function runs a ``function_exists()`` check and if the
-`Suhosin extension <http://www.hardened-php.net/suhosin/>` is loaded,
-checks if it doesn't disable the function being checked.
+	This function runs a ``function_exists()`` check and if the
+	`Suhosin extension <http://www.hardened-php.net/suhosin/>` is loaded,
+	checks if it doesn't disable the function being checked.
 
-It is useful if you want to check for the availability of functions
-such as ``eval()`` and ``exec()``, which are dangerous and might be
-disabled on servers with highly restrictive security policies.
\ No newline at end of file
+	It is useful if you want to check for the availability of functions
+	such as ``eval()`` and ``exec()``, which are dangerous and might be
+	disabled on servers with highly restrictive security policies.
\ No newline at end of file
diff --git a/user_guide_src/source/general/errors.rst b/user_guide_src/source/general/errors.rst
index f12d992..6cc8a09 100644
--- a/user_guide_src/source/general/errors.rst
+++ b/user_guide_src/source/general/errors.rst
@@ -21,8 +21,8 @@
 CodeIgniter also returns a status code whenever a portion of the core
 calls ``exit()``. This exit status code is separate from the HTTP status
 code, and serves as a notice to other processes that may be watching of
-whether the script completed successfully, or if not, what kind of 
-problem it encountered that caused it to abort. These values are 
+whether the script completed successfully, or if not, what kind of
+problem it encountered that caused it to abort. These values are
 defined in *application/config/constants.php*. While exit status codes
 are most useful in CLI settings, returning the proper code helps server
 software keep track of your scripts and the health of your application.
@@ -32,7 +32,7 @@
 show_error()
 ============
 
-.. php:function:: show_error($message, $status_code, $heading = 'An Error Was Encountered')
+.. function:: show_error($message, $status_code, $heading = 'An Error Was Encountered')
 
 	:param	mixed	$message: Error message
 	:param	int	$status_code: HTTP Response status code
@@ -49,13 +49,13 @@
 the HTTP status code will be set to 500, and the exit status code will
 be set to ``$status_code + EXIT__AUTO_MIN``. If that value is larger than
 ``EXIT__AUTO_MAX``, or if ``$status_code`` is 100 or higher, the exit
-status code will be set to ``EXIT_ERROR``. You can check in 
+status code will be set to ``EXIT_ERROR``. You can check in
 *application/config/constants.php* for more detail.
 
 show_404()
 ==========
 
-.. php:function:: show_404($page = '', $log_error = TRUE)
+.. function:: show_404($page = '', $log_error = TRUE)
 
 	:param	string	$page: URI string
 	:param	bool	$log_error: Whether to log the error
@@ -77,7 +77,7 @@
 log_message()
 =============
 
-.. php:function:: log_message($level, $message, $php_error = FALSE)
+.. function:: log_message($level, $message, $php_error = FALSE)
 
 	:param	string	$level: Log level: 'error', 'debug' or 'info'
 	:param	string	$message: Message to log
diff --git a/user_guide_src/source/general/requirements.rst b/user_guide_src/source/general/requirements.rst
index 1049236..0b67e8e 100644
--- a/user_guide_src/source/general/requirements.rst
+++ b/user_guide_src/source/general/requirements.rst
@@ -2,14 +2,15 @@
 Server Requirements
 ###################
 
--  `PHP <http://www.php.net/>`_ version 5.2.4 or newer.
--  A Database is required for most web application programming.
-   Currently supported databases are:
-   -  MySQL (5.1+) via the *mysql* (deprecated), *mysqli* and *pdo* drivers
-   -  Oracle via the *oci8* and *pdo* drivers
-   -  PostgreSQL via the *postgre* and *pdo* drivers
-   -  MS SQL via the *mssql*, *sqlsrv* (version 2005 and above only) and *pdo* drivers
-   -  SQLite via the *sqlite* (version 2), *sqlite3* (version 3) and *pdo* drivers
-   -  CUBRID via the *cubrid* and *pdo* drivers
-   -  Interbase/Firebird via the *ibase* and *pdo* drivers
-   -  ODBC via the *odbc* and *pdo* drivers (you should know that ODBC is actually an abstraction layer)
\ No newline at end of file
+- `PHP <http://www.php.net/>`_ version 5.2.4 or newer.
+- A Database is required for most web application programming.
+
+ Currently supported databases are:
+  - MySQL (5.1+) via the *mysql* (deprecated), *mysqli* and *pdo* drivers
+  - Oracle via the *oci8* and *pdo* drivers
+  - PostgreSQL via the *postgre* and *pdo* drivers
+  - MS SQL via the *mssql*, *sqlsrv* (version 2005 and above only) and *pdo* drivers
+  - SQLite via the *sqlite* (version 2), *sqlite3* (version 3) and *pdo* drivers
+  - CUBRID via the *cubrid* and *pdo* drivers
+  - Interbase/Firebird via the *ibase* and *pdo* drivers
+  - ODBC via the *odbc* and *pdo* drivers (you should know that ODBC is actually an abstraction layer)
\ No newline at end of file
diff --git a/user_guide_src/source/general/reserved_names.rst b/user_guide_src/source/general/reserved_names.rst
index ccc17d6..a767651 100644
--- a/user_guide_src/source/general/reserved_names.rst
+++ b/user_guide_src/source/general/reserved_names.rst
@@ -25,22 +25,22 @@
 Functions
 ---------
 
--  :php:func:`is_php()`
--  :php:func:`is_really_writable()`
+-  :func:`is_php()`
+-  :func:`is_really_writable()`
 -  ``load_class()``
 -  ``is_loaded()``
 -  ``get_config()``
--  :php:func:`config_item()`
--  :php:func:`show_error()`
--  :php:func:`show_404()`
--  :php:func:`log_message()`
--  :php:func:`set_status_header()`
--  :php:func:`get_mimes()`
--  :php:func:`html_escape()`
--  :php:func:`remove_invisible_characters()`
--  :php:func:`is_https()`
--  :php:func:`function_usable()`
--  :php:func:`get_instance()`
+-  :func:`config_item()`
+-  :func:`show_error()`
+-  :func:`show_404()`
+-  :func:`log_message()`
+-  :func:`set_status_header()`
+-  :func:`get_mimes()`
+-  :func:`html_escape()`
+-  :func:`remove_invisible_characters()`
+-  :func:`is_https()`
+-  :func:`function_usable()`
+-  :func:`get_instance()`
 -  ``_exception_handler()``
 -  ``_stringify_attributes()``
 
diff --git a/user_guide_src/source/helpers/array_helper.rst b/user_guide_src/source/helpers/array_helper.rst
index 9435b3a..20f5864 100644
--- a/user_guide_src/source/helpers/array_helper.rst
+++ b/user_guide_src/source/helpers/array_helper.rst
@@ -5,7 +5,12 @@
 The Array Helper file contains functions that assist in working with
 arrays.
 
-.. contents:: Page Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 Loading this Helper
 ===================
@@ -14,114 +19,112 @@
 
 	$this->load->helper('array');
 
+
+Available Functions
+===================
+
 The following functions are available:
 
-element()
-=========
 
-.. php:function:: element($item, $array, $default = NULL)
+.. function:: element($item, $array[, $default = NULL])
 
 	:param	string	$item: Item to fetch from the array
 	:param	array	$array: Input array
 	:param	bool	$default: What to return if the array isn't valid
 	:returns:	NULL on failure or the array item.
 
-Lets you fetch an item from an array. The function tests whether the
-array index is set and whether it has a value. If a value exists it is
-returned. If a value does not exist it returns NULL, or whatever you've
-specified as the default value via the third parameter.
+	Lets you fetch an item from an array. The function tests whether the
+	array index is set and whether it has a value. If a value exists it is
+	returned. If a value does not exist it returns NULL, or whatever you've
+	specified as the default value via the third parameter.
 
-Example::
+	Example::
 
-	$array = array(
-		'color'	=> 'red',
-		'shape'	=> 'round',
-		'size'	=> ''
-	);
+		$array = array(
+			'color'	=> 'red',
+			'shape'	=> 'round',
+			'size'	=> ''
+		);
 
-	echo element('color', $array); // returns "red" 
-	echo element('size', $array, 'foobar'); // returns "foobar" 
+		echo element('color', $array); // returns "red"
+		echo element('size', $array, 'foobar'); // returns "foobar"
 
-elements()
-==========
 
-.. php:function:: elements($items, $array, $default = NULL)
+.. function:: elements($items, $array[, $default = NULL])
 
 	:param	string	$item: Item to fetch from the array
 	:param	array	$array: Input array
 	:param	bool	$default: What to return if the array isn't valid
 	:returns:	NULL on failure or the array item.
 
-Lets you fetch a number of items from an array. The function tests
-whether each of the array indices is set. If an index does not exist it
-is set to NULL, or whatever you've specified as the default value via
-the third parameter. 
+	Lets you fetch a number of items from an array. The function tests
+	whether each of the array indices is set. If an index does not exist it
+	is set to NULL, or whatever you've specified as the default value via
+	the third parameter.
 
-Example::
+	Example::
 
-	$array = array(
-		'color' => 'red',
-		'shape' => 'round',
-		'radius' => '10',
-		'diameter' => '20'
-	);
+		$array = array(
+			'color' => 'red',
+			'shape' => 'round',
+			'radius' => '10',
+			'diameter' => '20'
+		);
 
-	$my_shape = elements(array('color', 'shape', 'height'), $array);
+		$my_shape = elements(array('color', 'shape', 'height'), $array);
 
-The above will return the following array::
+	The above will return the following array::
 
-	array(
-		'color' => 'red',
-		'shape' => 'round',
-		'height' => NULL
-	);
+		array(
+			'color' => 'red',
+			'shape' => 'round',
+			'height' => NULL
+		);
 
-You can set the third parameter to any default value you like.
-::
+	You can set the third parameter to any default value you like.
+	::
 
-	 $my_shape = elements(array('color', 'shape', 'height'), $array, 'foobar');
+		 $my_shape = elements(array('color', 'shape', 'height'), $array, 'foobar');
 
-The above will return the following array::
+	The above will return the following array::
 
-	array(     
-		'color' 	=> 'red',
-		'shape' 	=> 'round',
-		'height'	=> 'foobar'
-	);
+		array(     
+			'color' 	=> 'red',
+			'shape' 	=> 'round',
+			'height'	=> 'foobar'
+		);
 
-This is useful when sending the ``$_POST`` array to one of your Models.
-This prevents users from sending additional POST data to be entered into
-your tables.
+	This is useful when sending the ``$_POST`` array to one of your Models.
+	This prevents users from sending additional POST data to be entered into
+	your tables.
 
-::
+	::
 
-	$this->load->model('post_model');
-	$this->post_model->update(
-		elements(array('id', 'title', 'content'), $_POST)
-	);
+		$this->load->model('post_model');
+		$this->post_model->update(
+			elements(array('id', 'title', 'content'), $_POST)
+		);
 
-This ensures that only the id, title and content fields are sent to be
-updated.
+	This ensures that only the id, title and content fields are sent to be
+	updated.
 
-random_element()
-================
 
-.. php:function:: random_element($array)
+.. function:: random_element($array)
 
 	:param	array	$array: Input array
 	:returns:	string (a random element from the array)
 
-Takes an array as input and returns a random element from it.
+	Takes an array as input and returns a random element from it.
 
-Usage example::
+	Usage example::
 
-	$quotes = array(
-		"I find that the harder I work, the more luck I seem to have. - Thomas Jefferson",
-		"Don't stay in bed, unless you can make money in bed. - George Burns",
-		"We didn't lose the game; we just ran out of time. - Vince Lombardi",
-		"If everything seems under control, you're not going fast enough. - Mario Andretti",
-		"Reality is merely an illusion, albeit a very persistent one. - Albert Einstein",
-		"Chance favors the prepared mind - Louis Pasteur"
-	);
+		$quotes = array(
+			"I find that the harder I work, the more luck I seem to have. - Thomas Jefferson",
+			"Don't stay in bed, unless you can make money in bed. - George Burns",
+			"We didn't lose the game; we just ran out of time. - Vince Lombardi",
+			"If everything seems under control, you're not going fast enough. - Mario Andretti",
+			"Reality is merely an illusion, albeit a very persistent one. - Albert Einstein",
+			"Chance favors the prepared mind - Louis Pasteur"
+		);
 
-	echo random_element($quotes);
\ No newline at end of file
+		echo random_element($quotes);
\ No newline at end of file
diff --git a/user_guide_src/source/helpers/captcha_helper.rst b/user_guide_src/source/helpers/captcha_helper.rst
index f471734..13cf92a 100644
--- a/user_guide_src/source/helpers/captcha_helper.rst
+++ b/user_guide_src/source/helpers/captcha_helper.rst
@@ -5,56 +5,24 @@
 The CAPTCHA Helper file contains functions that assist in creating
 CAPTCHA images.
 
-.. contents:: Page Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 Loading this Helper
 ===================
 
-This helper is loaded using the following code
-::
+This helper is loaded using the following code::
 
 	$this->load->helper('captcha');
 
-The following functions are available:
-
-create_captcha()
-================
-
-.. php:function:: function create_captcha($data = '', $img_path = '', $img_url = '', $font_path = '')
-
-	:param	array	$data: Array of data for the CAPTCHA
-	:param	string	$img_path: Path to create the image in
-	:param	string	$img_url: URL to the CAPTCHA image folder
-	:param	string	$font_path: Server path to font
-	:returns:	array
-
-Takes an array of information to generate the CAPTCHA as input and
-creates the image to your specifications, returning an array of
-associative data about the image.
-
-::
-
-	array(
-		'word'     => CAPTCHA WORD,
-		'time'     => TIMESTAMP (in microtime),
-		'image'    => IMAGE TAG,
-		'filename' => IMAGE FILE NAME
-	)
-
-The **image** is the actual image tag::
-
-	<img src="http://example.com/captcha/12345.jpg" width="140" height="50" />
-
-The **time** is the micro timestamp used as the image name without the
-file extension. It will be a number like this: 1139612155.3422
-
-The **word** is the word that appears in the captcha image, which if not
-supplied to the function, will be a random string.
-
 Using the CAPTCHA helper
-------------------------
+========================
 
-Once loaded you can generate a captcha like this::
+Once loaded you can generate a CAPTCHA like this::
 
 	$vals = array(
 		'word'		=> 'Random word',
@@ -133,7 +101,7 @@
 	$this->db->query($query);
 
 	echo 'Submit the word you see below:';
-	echo $cap['image']; 
+	echo $cap['image'];
 	echo '<input type="text" name="captcha" value="" />';
 
 Then, on the page that accepts the submission you'll have something like
@@ -153,4 +121,39 @@
 	if ($row->count == 0)
 	{     
 		echo 'You must submit the word that appears in the image.';
-	}
\ No newline at end of file
+	}
+
+Available Functions
+===================
+
+The following functions are available:
+
+.. function:: create_captcha([$data = ''[, $img_path = ''[, $img_url = ''[, $font_path = '']]]])
+
+	:param	array	$data: Array of data for the CAPTCHA
+	:param	string	$img_path: Path to create the image in
+	:param	string	$img_url: URL to the CAPTCHA image folder
+	:param	string	$font_path: Server path to font
+	:returns:	array('word' => $word, 'time' => $now, 'image' => $img)
+
+	Takes an array of information to generate the CAPTCHA as input and
+	creates the image to your specifications, returning an array of
+	associative data about the image.
+
+	::
+
+		array(
+			'image'	=> IMAGE TAG
+			'time'	=> TIMESTAMP (in microtime)
+			'word'	=> CAPTCHA WORD
+		)
+
+	The **image** is the actual image tag::
+
+		<img src="http://example.com/captcha/12345.jpg" width="140" height="50" />
+
+	The **time** is the micro timestamp used as the image name without the
+	file extension. It will be a number like this: 1139612155.3422
+
+	The **word** is the word that appears in the captcha image, which if not
+	supplied to the function, will be a random string.
\ No newline at end of file
diff --git a/user_guide_src/source/helpers/cookie_helper.rst b/user_guide_src/source/helpers/cookie_helper.rst
index c41193c..3b59417 100644
--- a/user_guide_src/source/helpers/cookie_helper.rst
+++ b/user_guide_src/source/helpers/cookie_helper.rst
@@ -5,7 +5,12 @@
 The Cookie Helper file contains functions that assist in working with
 cookies.
 
-.. contents:: Page Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 Loading this Helper
 ===================
@@ -14,64 +19,59 @@
 
 	$this->load->helper('cookie');
 
+Available Functions
+===================
+
 The following functions are available:
 
-set_cookie()
-============
 
-.. php:function:: set_cookie($name = '', $value = '', $expire = '', $domain = '', $path = '/', $prefix = '', $secure = FALSE, $httponly = FALSE)
+.. function:: set_cookie($name[, $value = ''[, $expire = ''[, $domain = ''[, $path = '/'[, $prefix = ''[, $secure = FALSE[, $httponly = FALSE]]]]]]]])
 
-	:param	string	$name: Cookie name
-	:param	string	$value: Cookie value
-	:param	int	$expire: Number of seconds until expiration
-	:param	string	$domain: Cookie domain (usually: .yourdomain.com)
-	:param	string	$path: Cookie path
-	:param	string	$prefix: Cookie name prefix
-	:param	bool	$secure: Whether to only send the cookie through HTTPS
-	:param	bool	$httponly: Whether to hide the cookie from JavaScript
-	:returns:	void
-
-This helper function gives you view file friendly syntax to set browser
-cookies. Refer to the :doc:`Input Library <../libraries/input>` for a
-description of its use, as this function is an alias for
-``CI_Input::set_cookie()``.
-
-get_cookie()
-============
-
-.. php:function:: get_cookie($index = '', $xss_clean = FALSE)
-
-	:param	string	$index: Cookie name
-	:param	bool	$xss_clean: Whether to apply XSS filtering to the returned value
-	:returns:	mixed
-
-This helper function gives you view file friendly syntax to get browser
-cookies. Refer to the :doc:`Input Library <../libraries/input>` for a
-description of itsuse, as this function is an alias for ``CI_Input::cookie()``.
-
-delete_cookie()
-===============
-
-.. php:function:: delete_cookie($name = '', $domain = '', $path = '/', $prefix = '')
-
-	:param	string	$name: Cookie name
-	:param	string	$domain: Cookie domain (usually: .yourdomain.com)
-	:param	string	$path: Cookie path
-	:param	string	$prefix: Cookie name prefix
+	:param mixed $name: Cookie name *or* associative array of all of the parameters available to this function
+	:param string $value: Cookie value
+	:param int $expire: Number of seconds until expiration
+	:param string $domain: Cookie domain (usually: .yourdomain.com)
+	:param string $path: Cookie path
+	:param string $prefix: Cookie name prefix
+	:param bool $secure: Whether to only send the cookie through HTTPS
+	:param bool $httponly: Whether to hide the cookie from JavaScript
 	:returns: void
 
-Lets you delete a cookie. Unless you've set a custom path or other
-values, only the name of the cookie is needed.
+	This helper function gives you view file friendly syntax to set browser
+	cookies. Refer to the :doc:`Input Library <../libraries/input>` for a
+	description of its use, as this function is an alias for
+	``CI_Input::set_cookie()``.
 
-::
 
-	delete_cookie('name');
+.. function:: get_cookie($index[, $xss_clean = NULL]])
 
-This function is otherwise identical to ``set_cookie()``, except that it
-does not have the value and expiration parameters. You can submit an
-array of values in the first parameter or you can set discrete
-parameters.
+	:param string $index: Cookie name
+	:param bool $xss_clean: Whether to apply XSS filtering to the returned value
+	:returns: mixed
 
-::
+	This helper function gives you view file friendly syntax to get browser
+	cookies. Refer to the :doc:`Input Library <../libraries/input>` for a
+	description of its use, as this function is an alias for ``CI_Input::cookie()``.
 
-	delete_cookie($name, $domain, $path, $prefix)
\ No newline at end of file
+
+.. function:: delete_cookie($name[, $domain = ''[, $path = '/'[, $prefix = '']]]])
+
+	:param string $name: Cookie name
+	:param string $domain: Cookie domain (usually: .yourdomain.com)
+	:param string $path: Cookie path
+	:param string $prefix: Cookie name prefix
+	:returns: void
+
+	Lets you delete a cookie. Unless you've set a custom path or other
+	values, only the name of the cookie is needed.
+	::
+
+		delete_cookie('name');
+
+	This function is otherwise identical to ``set_cookie()``, except that it
+	does not have the value and expiration parameters. You can submit an
+	array of values in the first parameter or you can set discrete
+	parameters.
+	::
+
+		delete_cookie($name, $domain, $path, $prefix)
\ No newline at end of file
diff --git a/user_guide_src/source/helpers/date_helper.rst b/user_guide_src/source/helpers/date_helper.rst
index 8126eba..e9e122f 100644
--- a/user_guide_src/source/helpers/date_helper.rst
+++ b/user_guide_src/source/helpers/date_helper.rst
@@ -4,7 +4,12 @@
 
 The Date Helper file contains functions that help you work with dates.
 
-.. contents:: Page Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 Loading this Helper
 ===================
@@ -13,281 +18,258 @@
 
 	$this->load->helper('date');
 
+Available Functions
+===================
+
 The following functions are available:
 
-now()
-=====
 
-.. php:function:: now($timezone = NULL)
+.. function:: now([$timezone = NULL])
 
 	:param	string	$timezone: Timezone
 	:returns:	int
 
-Returns the current time as a UNIX timestamp, referenced either to your server's
-local time or any PHP suported timezone, based on the "time reference" setting
-in your config file. If you do not intend to set your master time reference to
-any other PHP supported timezone (which you'll typically do if you run a site
-that lets each user set their own timezone settings) there is no benefit to using
-this function over PHP's ``time()`` function.
+	Returns the current time as a UNIX timestamp, referenced either to your server's
+	local time or any PHP suported timezone, based on the "time reference" setting
+	in your config file. If you do not intend to set your master time reference to
+	any other PHP supported timezone (which you'll typically do if you run a site
+	that lets each user set their own timezone settings) there is no benefit to using
+	this function over PHP's ``time()`` function.
 
-::
+	::
 
-	echo now('Australia/Victoria');
+		echo now('Australia/Victoria');
 
-If a timezone is not provided, it will return ``time()`` based on the
-**time_reference** setting.
+	If a timezone is not provided, it will return ``time()`` based on the
+	**time_reference** setting.
 
-mdate()
-=======
 
-.. php:function:: mdate($datestr = '', $time = '')
+.. function:: mdate([$datestr = ''[, $time = '']])
 
 	:param	string 	$datestr: Date string
 	:param	int 	$time: UNIX timestamp
 	:returns:	int
 
-This function is identical to PHP's `date() <http://www.php.net/date>`_
-function, except that it lets you use MySQL style date codes, where each
-code letter is preceded with a percent sign, e.g. `%Y %m %d`
+	This function is identical to PHP's `date() <http://www.php.net/date>`_
+	function, except that it lets you use MySQL style date codes, where each
+	code letter is preceded with a percent sign, e.g. `%Y %m %d`
 
-The benefit of doing dates this way is that you don't have to worry
-about escaping any characters that are not date codes, as you would
-normally have to do with the ``date()`` function.
+	The benefit of doing dates this way is that you don't have to worry
+	about escaping any characters that are not date codes, as you would
+	normally have to do with the ``date()`` function.
 
-Example::
+	Example::
 
-	$datestring = 'Year: %Y Month: %m Day: %d - %h:%i %a';
-	$time = time();
-	echo mdate($datestring, $time);
+		$datestring = 'Year: %Y Month: %m Day: %d - %h:%i %a';
+		$time = time();
+		echo mdate($datestring, $time);
 
-If a timestamp is not included in the second parameter the current time
-will be used.
+	If a timestamp is not included in the second parameter the current time
+	will be used.
 
-standard_date()
-===============
 
-.. php:function:: standard_date($fmt = 'DATE_RFC822', $time = NULL)
+.. function:: standard_date([$fmt = 'DATE_RFC822'[, $time = NULL]])
 
 	:param	string	$fmt: Date format
 	:param	int 	$time: UNIX timestamp
 	:returns:	string
 
-Lets you generate a date string in one of several standardized formats.
+	Lets you generate a date string in one of several standardized formats.
 
-Example::
+	Example::
 
-	$format = 'DATE_RFC822';
-	$time = time();
-	echo standard_date($format, $time);
+		$format = 'DATE_RFC822';
+		$time = time();
+		echo standard_date($format, $time);
 
-.. note:: This function is DEPRECATED. Use the native ``date()`` combined with
-	`DateTime's format constants
-	<http://www.php.net/manual/en/class.datetime.php#datetime.constants.types>`_
-	instead:
+	.. note:: This function is DEPRECATED.Use the native ``date()`` combined with
+		`DateTime's format constants
+		<http://www.php.net/manual/en/class.datetime.php#datetime.constants.types>`_
+		instead::
 
-	|
-	| echo date(DATE_RFC822, time());
+			echo date(DATE_RFC822, time());
 
-Supported formats
------------------
+	**Supported formats:**
 
-===============	=======================	======================================
-Constant		Description				Example
-===============	=======================	======================================
-DATE_ATOM	Atom			2005-08-15T16:13:03+0000
-DATE_COOKIE	HTTP Cookies		Sun, 14 Aug 2005 16:13:03 UTC
-DATE_ISO8601   	ISO-8601		2005-08-14T16:13:03+00:00
-DATE_RFC822	RFC 822			Sun, 14 Aug 05 16:13:03 UTC
-DATE_RFC850	RFC 850			Sunday, 14-Aug-05 16:13:03 UTC
-DATE_RFC1036	RFC 1036		Sunday, 14-Aug-05 16:13:03 UTC
-DATE_RFC1123	RFC 1123		Sun, 14 Aug 2005 16:13:03 UTC
-DATE_RFC2822 	RFC 2822		Sun, 14 Aug 2005 16:13:03 +0000
-DATE_RSS	RSS			Sun, 14 Aug 2005 16:13:03 UTC
-DATE_W3C	W3C			2005-08-14T16:13:03+0000
-===============	=======================	======================================
+	===============	=======================	======================================
+	Constant		Description				Example
+	===============	=======================	======================================
+	DATE_ATOM	Atom			2005-08-15T16:13:03+0000
+	DATE_COOKIE	HTTP Cookies		Sun, 14 Aug 2005 16:13:03 UTC
+	DATE_ISO8601   	ISO-8601		2005-08-14T16:13:03+00:00
+	DATE_RFC822	RFC 822			Sun, 14 Aug 05 16:13:03 UTC
+	DATE_RFC850	RFC 850			Sunday, 14-Aug-05 16:13:03 UTC
+	DATE_RFC1036	RFC 1036		Sunday, 14-Aug-05 16:13:03 UTC
+	DATE_RFC1123	RFC 1123		Sun, 14 Aug 2005 16:13:03 UTC
+	DATE_RFC2822 	RFC 2822		Sun, 14 Aug 2005 16:13:03 +0000
+	DATE_RSS	RSS			Sun, 14 Aug 2005 16:13:03 UTC
+	DATE_W3C	W3C			2005-08-14T16:13:03+0000
+	===============	=======================	======================================
 
-local_to_gmt()
-==============
 
-.. php:function:: local_to_gmt($time = '')
+.. function:: local_to_gmt([$time = ''])
 
 	:param	int	$time: UNIX timestamp
 	:returns:	string
 
-Takes a UNIX timestamp as input and returns it as GMT.
+	Takes a UNIX timestamp as input and returns it as GMT.
 
-Example::
+	Example::
 
-	$gmt = local_to_gmt(time());
+		$gmt = local_to_gmt(time());
 
-gmt_to_local()
-==============
 
-.. php:function:: gmt_to_local($time = '', $timezone = 'UTC', $dst = FALSE)
+.. function:: gmt_to_local([$time = ''[, $timezone = 'UTC'[, $dst = FALSE]]])
 
 	:param	int 	$time: UNIX timestamp
 	:param	string	$timezone: Timezone
 	:param	bool 	$dst: Whether DST is active
 	:returns:	int
 
-Takes a UNIX timestamp (referenced to GMT) as input, and converts it to
-a localized timestamp based on the timezone and Daylight Saving Time
-submitted.
+	Takes a UNIX timestamp (referenced to GMT) as input, and converts it to
+	a localized timestamp based on the timezone and Daylight Saving Time
+	submitted.
 
-Example::
+	Example::
 
-	$timestamp = 1140153693;
-	$timezone  = 'UM8';
-	$daylight_saving = TRUE;
-	echo gmt_to_local($timestamp, $timezone, $daylight_saving);
+		$timestamp = 1140153693;
+		$timezone  = 'UM8';
+		$daylight_saving = TRUE;
+		echo gmt_to_local($timestamp, $timezone, $daylight_saving);
 
 
-.. note:: For a list of timezones see the reference at the bottom of this page.
+	.. note:: For a list of timezones see the reference at the bottom of this page.
 
-mysql_to_unix()
-===============
 
-.. php:function:: mysql_to_unix($time = '')
+.. function:: mysql_to_unix([$time = ''])
 
 	:param	int 	$time: UNIX timestamp
 	:returns:	int
 
-Takes a MySQL Timestamp as input and returns it as a UNIX timestamp.
+	Takes a MySQL Timestamp as input and returns it as a UNIX timestamp.
 
-Example::
+	Example::
 
-	$unix = mysql_to_unix('20061124092345');
+		$unix = mysql_to_unix('20061124092345');
 
-unix_to_human()
-===============
 
-.. php:function:: unix_to_human($time = '', $seconds = FALSE, $fmt = 'us')
+.. function:: unix_to_human([$time = ''[, $seconds = FALSE[, $fmt = 'us']]])
 
 	:param	int	$time: UNIX timestamp
 	:param	bool	$seconds: Whether to show seconds
 	:param	string	$fmt: format (us or euro)
 	:returns: integer
 
-Takes a UNIX timestamp as input and returns it in a human readable
-format with this prototype::
+	Takes a UNIX timestamp as input and returns it in a human readable
+	format with this prototype::
 
-	YYYY-MM-DD HH:MM:SS AM/PM
+		YYYY-MM-DD HH:MM:SS AM/PM
 
-This can be useful if you need to display a date in a form field for
-submission.
+	This can be useful if you need to display a date in a form field for
+	submission.
 
-The time can be formatted with or without seconds, and it can be set to
-European or US format. If only the timestamp is submitted it will return
-the time without seconds formatted for the U.S.
+	The time can be formatted with or without seconds, and it can be set to
+	European or US format. If only the timestamp is submitted it will return
+	the time without seconds formatted for the U.S.
 
-Examples::
+	Examples::
 
-	$now = time();
-	echo unix_to_human($now); // U.S. time, no seconds
-	echo unix_to_human($now, TRUE, 'us'); // U.S. time with seconds
-	echo unix_to_human($now, TRUE, 'eu'); // Euro time with seconds
+		$now = time();
+		echo unix_to_human($now); // U.S. time, no seconds
+		echo unix_to_human($now, TRUE, 'us'); // U.S. time with seconds
+		echo unix_to_human($now, TRUE, 'eu'); // Euro time with seconds
 
-human_to_unix()
-===============
 
-.. php:function:: human_to_unix($datestr = '')
+.. function:: human_to_unix([$datestr = ''])
 
 	:param	int 	$datestr: Date string
 	:returns:	int UNIX timestamp or FALSE on failure
 
-The opposite of the :php:func:`unix_to_time()` function. Takes a "human"
-time as input and returns it as a UNIX timestamp. This is useful if you
-accept "human" formatted dates submitted via a form. Returns boolean FALSE
-date string passed to it is not formatted as indicated above.
+	The opposite of the :func:`unix_to_time()` function. Takes a "human"
+	time as input and returns it as a UNIX timestamp. This is useful if you
+	accept "human" formatted dates submitted via a form. Returns boolean FALSE
+	date string passed to it is not formatted as indicated above.
 
-Example::
+	Example::
 
-	$now = time();
-	$human = unix_to_human($now);
-	$unix = human_to_unix($human);
+		$now = time();
+		$human = unix_to_human($now);
+		$unix = human_to_unix($human);
 
-nice_date()
-===========
 
-.. php:function:: nice_date($bad_date = '', $format = FALSE)
+.. function:: nice_date([$bad_date = ''[, $format = FALSE]])
 
 	:param	int	$bad_date: The terribly formatted date-like string
 	:param	string	$format: Date format to return (same as PHP's ``date()`` function)
 	:returns:	string
 
-This function can take a number poorly-formed date formats and convert
-them into something useful. It also accepts well-formed dates.
+	This function can take a number poorly-formed date formats and convert
+	them into something useful. It also accepts well-formed dates.
 
-The function will return a UNIX timestamp by default. You can, optionally,
-pass a format string (the same type as the PHP ``date()`` function accepts)
-as the second parameter.
+	The function will return a UNIX timestamp by default. You can, optionally,
+	pass a format string (the same type as the PHP ``date()`` function accepts)
+	as the second parameter.
 
-Example::
+	Example::
 
-	$bad_date = '199605';
-	// Should Produce: 1996-05-01
-	$better_date = nice_date($bad_date, 'Y-m-d');
+		$bad_date = '199605';
+		// Should Produce: 1996-05-01
+		$better_date = nice_date($bad_date, 'Y-m-d');
 
-	$bad_date = '9-11-2001';
-	// Should Produce: 2001-09-11
-	$better_date = nice_date($bad_date, 'Y-m-d');
+		$bad_date = '9-11-2001';
+		// Should Produce: 2001-09-11
+		$better_date = nice_date($bad_date, 'Y-m-d');
 
-timespan()
-==========
 
-.. php:function:: timespan($seconds = 1, $time = '', $units = '')
+.. function:: timespan([$seconds = 1[, $time = ''[, $units = '']]])
 
 	:param	int	$seconds: Number of seconds
 	:param	string	$time: UNIX timestamp
 	:param	int	$units: Number of time units to display
 	:returns:	string
 
-Formats a UNIX timestamp so that is appears similar to this::
+	Formats a UNIX timestamp so that is appears similar to this::
 
-	1 Year, 10 Months, 2 Weeks, 5 Days, 10 Hours, 16 Minutes
+		1 Year, 10 Months, 2 Weeks, 5 Days, 10 Hours, 16 Minutes
 
-The first parameter must contain a UNIX timestamp.
-The second parameter must contain a timestamp that is greater that the
-first timestamp.
-The thirdparameter is optional and limits the number of time units to display.
+	The first parameter must contain a UNIX timestamp.
+	The second parameter must contain a timestamp that is greater that the
+	first timestamp.
+	The thirdparameter is optional and limits the number of time units to display.
 
-If the second parameter empty, the current time will be used.
+	If the second parameter empty, the current time will be used.
 
-The most common purpose for this function is to show how much time has
-elapsed from some point in time in the past to now.
+	The most common purpose for this function is to show how much time has
+	elapsed from some point in time in the past to now.
 
-Example::
+	Example::
 
-	$post_date = '1079621429';
-	$now = time();
-	$units = 2;
-	echo timespan($post_date, $now, $units);
+		$post_date = '1079621429';
+		$now = time();
+		$units = 2;
+		echo timespan($post_date, $now, $units);
 
-.. note:: The text generated by this function is found in the following language
-	file: `language/<your_lang>/date_lang.php`
+	.. note:: The text generated by this function is found in the following language
+		file: `language/<your_lang>/date_lang.php`
 
-days_in_month()
-===============
 
-.. php:function:: days_in_month($month = 0, $year = '')
+.. function:: days_in_month([$month = 0[, $year = '']])
 
 	:param	int	$month: a numeric month
 	:param	int	$year: a numeric year
 	:returns:	int
 
-Returns the number of days in a given month/year. Takes leap years into
-account.
+	Returns the number of days in a given month/year. Takes leap years into
+	account.
 
-Example::
+	Example::
 
-	echo days_in_month(06, 2005);
+		echo days_in_month(06, 2005);
 
-If the second parameter is empty, the current year will be used.
+	If the second parameter is empty, the current year will be used.
 
-date_range()
-============
 
-.. php:function:: date_range($unix_start = '', $mixed = '', $is_unix = TRUE, $format = 'Y-m-d')
+.. function:: date_range([$unix_start = ''[, $mixed = ''[, $is_unix = TRUE[, $format = 'Y-m-d']]]])
 
 	:param	int	$unix_start: UNIX timestamp of the range start date
 	:param	int	$mixed: UNIX timestamp of the range end date or interval in days
@@ -295,40 +277,36 @@
 	:param	string	$format: Output date format, same as in ``date()``
 	:returns:	array
 
-Returns a list of dates within a specified period.
+	Returns a list of dates within a specified period.
 
-Example::
+	Example::
 
-	$range = date_range('2012-01-01', '2012-01-15');
-	echo "First 15 days of 2012:";
-	foreach ($range as $date)
-	{
-		echo $date."\n";
-	}
+		$range = date_range('2012-01-01', '2012-01-15');
+		echo "First 15 days of 2012:";
+		foreach ($range as $date)
+		{
+			echo $date."\n";
+		}
 
-timezones()
-===========
 
-.. php:function:: timezones($tz = '')
+.. function:: timezones([$tz = ''])
 
 	:param	string	$tz: a numeric timezone
 	:returns:	string
 
-Takes a timezone reference (for a list of valid timezones, see the
-"Timezone Reference" below) and returns the number of hours offset from
-UTC.
+	Takes a timezone reference (for a list of valid timezones, see the
+	"Timezone Reference" below) and returns the number of hours offset from
+	UTC.
 
-Example::
+	Example::
 
-	echo timezones('UM5');
+		echo timezones('UM5');
 
 
-This function is useful when used with :php:func:`timezone_menu()`.
+	This function is useful when used with :func:`timezone_menu()`.
 
-timezone_menu()
-===============
 
-.. php:function:: timezone_menu($default = 'UTC', $class = '', $name = 'timezones', $attributes = '')
+.. function:: timezone_menu([$default = 'UTC'[, $class = ''[, $name = 'timezones'[, $attributes = '']]]])
 
 	:param	string	$default: Timezone
 	:param	string	$class: Class name
@@ -336,72 +314,72 @@
 	:param	mixed	$attributes: HTML attributes
 	:returns:	string
 
-Generates a pull-down menu of timezones, like this one:
+	Generates a pull-down menu of timezones, like this one:
 
-.. raw:: html
+	.. raw:: html
 
-	<form action="#">
-		<select name="timezones">
-			<option value='UM12'>(UTC -12:00) Baker/Howland Island</option>
-			<option value='UM11'>(UTC -11:00) Samoa Time Zone, Niue</option>
-			<option value='UM10'>(UTC -10:00) Hawaii-Aleutian Standard Time, Cook Islands, Tahiti</option>
-			<option value='UM95'>(UTC -9:30) Marquesas Islands</option>
-			<option value='UM9'>(UTC -9:00) Alaska Standard Time, Gambier Islands</option>
-			<option value='UM8'>(UTC -8:00) Pacific Standard Time, Clipperton Island</option>
-			<option value='UM7'>(UTC -7:00) Mountain Standard Time</option>
-			<option value='UM6'>(UTC -6:00) Central Standard Time</option>
-			<option value='UM5'>(UTC -5:00) Eastern Standard Time, Western Caribbean Standard Time</option>
-			<option value='UM45'>(UTC -4:30) Venezuelan Standard Time</option>
-			<option value='UM4'>(UTC -4:00) Atlantic Standard Time, Eastern Caribbean Standard Time</option>
-			<option value='UM35'>(UTC -3:30) Newfoundland Standard Time</option>
-			<option value='UM3'>(UTC -3:00) Argentina, Brazil, French Guiana, Uruguay</option>
-			<option value='UM2'>(UTC -2:00) South Georgia/South Sandwich Islands</option>
-			<option value='UM1'>(UTC -1:00) Azores, Cape Verde Islands</option>
-			<option value='UTC' selected='selected'>(UTC) Greenwich Mean Time, Western European Time</option>
-			<option value='UP1'>(UTC +1:00) Central European Time, West Africa Time</option>
-			<option value='UP2'>(UTC +2:00) Central Africa Time, Eastern European Time, Kaliningrad Time</option>
-			<option value='UP3'>(UTC +3:00) Moscow Time, East Africa Time</option>
-			<option value='UP35'>(UTC +3:30) Iran Standard Time</option>
-			<option value='UP4'>(UTC +4:00) Azerbaijan Standard Time, Samara Time</option>
-			<option value='UP45'>(UTC +4:30) Afghanistan</option>
-			<option value='UP5'>(UTC +5:00) Pakistan Standard Time, Yekaterinburg Time</option>
-			<option value='UP55'>(UTC +5:30) Indian Standard Time, Sri Lanka Time</option>
-			<option value='UP575'>(UTC +5:45) Nepal Time</option>
-			<option value='UP6'>(UTC +6:00) Bangladesh Standard Time, Bhutan Time, Omsk Time</option>
-			<option value='UP65'>(UTC +6:30) Cocos Islands, Myanmar</option>
-			<option value='UP7'>(UTC +7:00) Krasnoyarsk Time, Cambodia, Laos, Thailand, Vietnam</option>
-			<option value='UP8'>(UTC +8:00) Australian Western Standard Time, Beijing Time, Irkutsk Time</option>
-			<option value='UP875'>(UTC +8:45) Australian Central Western Standard Time</option>
-			<option value='UP9'>(UTC +9:00) Japan Standard Time, Korea Standard Time, Yakutsk Time</option>
-			<option value='UP95'>(UTC +9:30) Australian Central Standard Time</option>
-			<option value='UP10'>(UTC +10:00) Australian Eastern Standard Time, Vladivostok Time</option>
-			<option value='UP105'>(UTC +10:30) Lord Howe Island</option>
-			<option value='UP11'>(UTC +11:00) Magadan Time, Solomon Islands, Vanuatu</option>
-			<option value='UP115'>(UTC +11:30) Norfolk Island</option>
-			<option value='UP12'>(UTC +12:00) Fiji, Gilbert Islands, Kamchatka Time, New Zealand Standard Time</option>
-			<option value='UP1275'>(UTC +12:45) Chatham Islands Standard Time</option>
-			<option value='UP13'>(UTC +13:00) Phoenix Islands Time, Tonga</option>
-			<option value='UP14'>(UTC +14:00) Line Islands</option>
-		</select>
-	</form>
+		<form action="#">
+			<select name="timezones">
+				<option value='UM12'>(UTC -12:00) Baker/Howland Island</option>
+				<option value='UM11'>(UTC -11:00) Samoa Time Zone, Niue</option>
+				<option value='UM10'>(UTC -10:00) Hawaii-Aleutian Standard Time, Cook Islands, Tahiti</option>
+				<option value='UM95'>(UTC -9:30) Marquesas Islands</option>
+				<option value='UM9'>(UTC -9:00) Alaska Standard Time, Gambier Islands</option>
+				<option value='UM8'>(UTC -8:00) Pacific Standard Time, Clipperton Island</option>
+				<option value='UM7'>(UTC -7:00) Mountain Standard Time</option>
+				<option value='UM6'>(UTC -6:00) Central Standard Time</option>
+				<option value='UM5'>(UTC -5:00) Eastern Standard Time, Western Caribbean Standard Time</option>
+				<option value='UM45'>(UTC -4:30) Venezuelan Standard Time</option>
+				<option value='UM4'>(UTC -4:00) Atlantic Standard Time, Eastern Caribbean Standard Time</option>
+				<option value='UM35'>(UTC -3:30) Newfoundland Standard Time</option>
+				<option value='UM3'>(UTC -3:00) Argentina, Brazil, French Guiana, Uruguay</option>
+				<option value='UM2'>(UTC -2:00) South Georgia/South Sandwich Islands</option>
+				<option value='UM1'>(UTC -1:00) Azores, Cape Verde Islands</option>
+				<option value='UTC' selected='selected'>(UTC) Greenwich Mean Time, Western European Time</option>
+				<option value='UP1'>(UTC +1:00) Central European Time, West Africa Time</option>
+				<option value='UP2'>(UTC +2:00) Central Africa Time, Eastern European Time, Kaliningrad Time</option>
+				<option value='UP3'>(UTC +3:00) Moscow Time, East Africa Time</option>
+				<option value='UP35'>(UTC +3:30) Iran Standard Time</option>
+				<option value='UP4'>(UTC +4:00) Azerbaijan Standard Time, Samara Time</option>
+				<option value='UP45'>(UTC +4:30) Afghanistan</option>
+				<option value='UP5'>(UTC +5:00) Pakistan Standard Time, Yekaterinburg Time</option>
+				<option value='UP55'>(UTC +5:30) Indian Standard Time, Sri Lanka Time</option>
+				<option value='UP575'>(UTC +5:45) Nepal Time</option>
+				<option value='UP6'>(UTC +6:00) Bangladesh Standard Time, Bhutan Time, Omsk Time</option>
+				<option value='UP65'>(UTC +6:30) Cocos Islands, Myanmar</option>
+				<option value='UP7'>(UTC +7:00) Krasnoyarsk Time, Cambodia, Laos, Thailand, Vietnam</option>
+				<option value='UP8'>(UTC +8:00) Australian Western Standard Time, Beijing Time, Irkutsk Time</option>
+				<option value='UP875'>(UTC +8:45) Australian Central Western Standard Time</option>
+				<option value='UP9'>(UTC +9:00) Japan Standard Time, Korea Standard Time, Yakutsk Time</option>
+				<option value='UP95'>(UTC +9:30) Australian Central Standard Time</option>
+				<option value='UP10'>(UTC +10:00) Australian Eastern Standard Time, Vladivostok Time</option>
+				<option value='UP105'>(UTC +10:30) Lord Howe Island</option>
+				<option value='UP11'>(UTC +11:00) Magadan Time, Solomon Islands, Vanuatu</option>
+				<option value='UP115'>(UTC +11:30) Norfolk Island</option>
+				<option value='UP12'>(UTC +12:00) Fiji, Gilbert Islands, Kamchatka Time, New Zealand Standard Time</option>
+				<option value='UP1275'>(UTC +12:45) Chatham Islands Standard Time</option>
+				<option value='UP13'>(UTC +13:00) Phoenix Islands Time, Tonga</option>
+				<option value='UP14'>(UTC +14:00) Line Islands</option>
+			</select>
+		</form>
 
 
-This menu is useful if you run a membership site in which your users are
-allowed to set their local timezone value.
+	This menu is useful if you run a membership site in which your users are
+	allowed to set their local timezone value.
 
-The first parameter lets you set the "selected" state of the menu. For
-example, to set Pacific time as the default you will do this::
+	The first parameter lets you set the "selected" state of the menu. For
+	example, to set Pacific time as the default you will do this::
 
-	echo timezone_menu('UM8');
+		echo timezone_menu('UM8');
 
-Please see the timezone reference below to see the values of this menu.
+	Please see the timezone reference below to see the values of this menu.
 
-The second parameter lets you set a CSS class name for the menu.
+	The second parameter lets you set a CSS class name for the menu.
 
-The fourth parameter lets you set one or more attributes on the generated select tag.
+	The fourth parameter lets you set one or more attributes on the generated select tag.
 
-.. note:: The text contained in the menu is found in the following
-	language file: `language/<your_lang>/date_lang.php`
+	.. note:: The text contained in the menu is found in the following
+		language file: `language/<your_lang>/date_lang.php`
 
 
 Timezone Reference
diff --git a/user_guide_src/source/helpers/directory_helper.rst b/user_guide_src/source/helpers/directory_helper.rst
index a785ebc..514e80c 100644
--- a/user_guide_src/source/helpers/directory_helper.rst
+++ b/user_guide_src/source/helpers/directory_helper.rst
@@ -5,7 +5,12 @@
 The Directory Helper file contains functions that assist in working with
 directories.
 
-.. contents:: Page Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 Loading this Helper
 ===================
@@ -16,64 +21,63 @@
 
 	$this->load->helper('directory');
 
+Available Functions
+===================
+
 The following functions are available:
 
-directory_map()
-===============
 
-This function reads the directory path specified in the first parameter
-and builds an array representation of it and all its contained files.
-	
-.. php:method:: directory_map($source_dir[, $directory_depth = 0[, $hidden = FALSE]])
+.. function:: directory_map($source_dir[, $directory_depth = 0[, $hidden = FALSE]])
 
 	:param string	$source_dir: path to the ource directory
 	:param integer	$directory_depth: depth of directories to traverse (0 =
 		fully recursive, 1 = current dir, etc)
 	:param boolean	$hidden: whether to include hidden directories
-	
-Examples::
+	:returns: array
 
-	$map = directory_map('./mydirectory/');
+	Examples::
 
-.. note:: Paths are almost always relative to your main index.php file.
+		$map = directory_map('./mydirectory/');
+
+	.. note:: Paths are almost always relative to your main index.php file.
 
 
-Sub-folders contained within the directory will be mapped as well. If
-you wish to control the recursion depth, you can do so using the second
-parameter (integer). A depth of 1 will only map the top level directory::
+	Sub-folders contained within the directory will be mapped as well. If
+	you wish to control the recursion depth, you can do so using the second
+	parameter (integer). A depth of 1 will only map the top level directory::
 
-	$map = directory_map('./mydirectory/', 1);
+		$map = directory_map('./mydirectory/', 1);
 
-By default, hidden files will not be included in the returned array. To
-override this behavior, you may set a third parameter to true (boolean)::
+	By default, hidden files will not be included in the returned array. To
+	override this behavior, you may set a third parameter to true (boolean)::
 
-	$map = directory_map('./mydirectory/', FALSE, TRUE);
+		$map = directory_map('./mydirectory/', FALSE, TRUE);
 
-Each folder name will be an array index, while its contained files will
-be numerically indexed. Here is an example of a typical array::
+	Each folder name will be an array index, while its contained files will
+	be numerically indexed. Here is an example of a typical array::
 
-	Array (    
-		[libraries] => Array    
-			(        
-				[0] => benchmark.html        
-				[1] => config.html        
-				["database/"] => Array
-					(              
-						[0] => query_builder.html              
-						[1] => binds.html              
-						[2] => configuration.html
-						[3] => connecting.html              
-						[4] => examples.html              
-						[5] => fields.html              
-						[6] => index.html
-						[7] => queries.html
-					)        
-				[2] => email.html        
-				[3] => file_uploading.html        
-				[4] => image_lib.html        
-				[5] => input.html        
-				[6] => language.html        
-				[7] => loader.html        
-				[8] => pagination.html        
-				[9] => uri.html
-			)
\ No newline at end of file
+		Array (    
+			[libraries] => Array    
+				(        
+					[0] => benchmark.html        
+					[1] => config.html        
+					["database/"] => Array
+						(              
+							[0] => query_builder.html              
+							[1] => binds.html              
+							[2] => configuration.html
+							[3] => connecting.html              
+							[4] => examples.html              
+							[5] => fields.html              
+							[6] => index.html
+							[7] => queries.html
+						)        
+					[2] => email.html        
+					[3] => file_uploading.html        
+					[4] => image_lib.html        
+					[5] => input.html        
+					[6] => language.html        
+					[7] => loader.html        
+					[8] => pagination.html        
+					[9] => uri.html
+				)
\ No newline at end of file
diff --git a/user_guide_src/source/helpers/download_helper.rst b/user_guide_src/source/helpers/download_helper.rst
index 860c568..17b68f4 100644
--- a/user_guide_src/source/helpers/download_helper.rst
+++ b/user_guide_src/source/helpers/download_helper.rst
@@ -4,7 +4,12 @@
 
 The Download Helper lets you download data to your desktop.
 
-.. contents:: Page Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 Loading this Helper
 ===================
@@ -13,38 +18,39 @@
 
 	$this->load->helper('download');
 
+Available Functions
+===================
+
 The following functions are available:
 
-force_download()
-================
 
-.. php:function:: force_download($filename = '', $data = '', $set_mime = FALSE)
+.. function:: force_download([$filename = ''[, $data = ''[, $set_mime = FALSE]]])
 
 	:param	string	$filename: Filename
 	:param	mixed	$data: File contents
 	:param	bool	$set_mime: Whether to try to send the actual MIME type
 	:returns:	void
 
-Generates server headers which force data to be downloaded to your
-desktop. Useful with file downloads. The first parameter is the **name
-you want the downloaded file to be named**, the second parameter is the
-file data.
+	Generates server headers which force data to be downloaded to your
+	desktop. Useful with file downloads. The first parameter is the **name
+	you want the downloaded file to be named**, the second parameter is the
+	file data.
 
-If you set the second parameter to NULL and ``$filename`` is an existing, readable
-file path, then its content will be read instead.
+	If you set the second parameter to NULL and ``$filename`` is an existing, readable
+	file path, then its content will be read instead.
 
-If you set the third parameter to boolean TRUE, then the actual file MIME type
-(based on the filename extension) will be sent, so that if your browser has a
-handler for that type - it can use it.
+	If you set the third parameter to boolean TRUE, then the actual file MIME type
+	(based on the filename extension) will be sent, so that if your browser has a
+	handler for that type - it can use it.
 
-Example::
+	Example::
 
-	$data = 'Here is some text!';
-	$name = 'mytext.txt';
-	force_download($name, $data);
+		$data = 'Here is some text!';
+		$name = 'mytext.txt';
+		force_download($name, $data);
 
-If you want to download an existing file from your server you'll need to
-do the following::
+	If you want to download an existing file from your server you'll need to
+	do the following::
 
-	// Contents of photo.jpg will be automatically read
-	force_download('/path/to/photo.jpg', NULL);
\ No newline at end of file
+		// Contents of photo.jpg will be automatically read
+		force_download('/path/to/photo.jpg', NULL);
\ No newline at end of file
diff --git a/user_guide_src/source/helpers/email_helper.rst b/user_guide_src/source/helpers/email_helper.rst
index 10adf1d..fe3ccdd 100644
--- a/user_guide_src/source/helpers/email_helper.rst
+++ b/user_guide_src/source/helpers/email_helper.rst
@@ -6,9 +6,14 @@
 Email. For a more robust email solution, see CodeIgniter's :doc:`Email
 Class <../libraries/email>`.
 
-.. contents:: Page Contents
+.. important:: The Email helper is **deprecated**.
 
-.. important:: The Email helper is DEPRECATED.
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 Loading this Helper
 ===================
@@ -17,51 +22,52 @@
 
 	$this->load->helper('email');
 
+Available Functions
+===================
+
 The following functions are available:
 
-valid_email()
-=============
 
-.. php:function:: valid_email($email)
+.. function:: valid_email($email)
 
 	:param	string	$email: Email address
 	:returns:	bool
 
-Checks if the input is a correctly formatted e-mail address. Note that is
-doesn't actually prove that the address will be able recieve mail, but
-simply that it is a validly formed address.
+	Checks if the input is a correctly formatted e-mail address. Note that is
+	doesn't actually prove that the address will be able recieve mail, but
+	simply that it is a validly formed address.
 
-Example::
+	Example::
 
-	if (valid_email('email@somesite.com'))
-	{
-		echo 'email is valid';
-	}
-	else
-	{
-		echo 'email is not valid';
-	}
+		if (valid_email('email@somesite.com'))
+		{
+			echo 'email is valid';
+		}
+		else
+		{
+			echo 'email is not valid';
+		}
 
-.. note:: All that this function does is to use PHP's native ``filter_var()``:
-	|
-	| (bool) filter_var($email, FILTER_VALIDATE_EMAIL);
+	.. note:: All that this function does is to use PHP's native ``filter_var()``::
 
-send_email()
-============
+		(bool) filter_var($email, FILTER_VALIDATE_EMAIL);
 
-.. php:function:: send_email($recipient, $subject, $message)
+
+.. function:: send_email($recipient, $subject, $message)
 
 	:param	string	$recipient: E-mail address
 	:param	string	$subject: Mail subject
 	:param	string	$message: Message body
 	:returns:	bool
 
-Sends an email using PHP's native `mail() <http://www.php.net/function.mail>`_
-function.
+	Sends an email using PHP's native `mail() <http://www.php.net/function.mail>`_
+	function.
 
-.. note:: All that this function does is to use PHP's native ``mail``:
-	|
-	| mail($recipient, $subject, $message);
+	.. note:: All that this function does is to use PHP's native ``mail``
 
-For a more robust email solution, see CodeIgniter's :doc:`Email Library
-<../libraries/email>`.
+		::
+
+			mail($recipient, $subject, $message);
+
+	For a more robust email solution, see CodeIgniter's :doc:`Email Library
+	<../libraries/email>`.
diff --git a/user_guide_src/source/helpers/file_helper.rst b/user_guide_src/source/helpers/file_helper.rst
index 194d434..4d225d2 100644
--- a/user_guide_src/source/helpers/file_helper.rst
+++ b/user_guide_src/source/helpers/file_helper.rst
@@ -4,7 +4,12 @@
 
 The File Helper file contains functions that assist in working with files.
 
-.. contents:: Page Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 Loading this Helper
 ===================
@@ -13,204 +18,188 @@
 
 	$this->load->helper('file');
 
+Available Functions
+===================
+
 The following functions are available:
 
-read_file()
-===========
 
-.. php:function:: read_file($file)
+.. function:: read_file($file)
 
 	:param	string	$file: File path
 	:returns:	string or FALSE on failure
 
-Returns the data contained in the file specified in the path.
+	Returns the data contained in the file specified in the path.
 
-Example::
+	Example::
 
-	$string = read_file('./path/to/file.php');
+		$string = read_file('./path/to/file.php');
 
-The path can be a relative or full server path. Returns FALSE (boolean) on failure.
+	The path can be a relative or full server path. Returns FALSE (boolean) on failure.
 
-.. note:: The path is relative to your main site index.php file, NOT your
-	controller or view files. CodeIgniter uses a front controller so paths
-	are always relative to the main site index.
+	.. note:: The path is relative to your main site index.php file, NOT your
+		controller or view files. CodeIgniter uses a front controller so paths
+		are always relative to the main site index.
 
-.. note:: This function is DEPRECATED. Use the native ``file_get_contents()``
-	instead.
+	.. note:: This function is DEPRECATED. Use the native ``file_get_contents()``
+		instead.
 
-.. important:: If your server is running an **open_basedir** restriction this
-	function might not work if you are trying to access a file above the
-	calling script.
+	.. important:: If your server is running an **open_basedir** restriction this
+		function might not work if you are trying to access a file above the
+		calling script.
 
-write_file()
-============
 
-.. php:function:: write_file($path, $data, $mode = 'wb')
+.. function:: write_file($path, $data[, $mode = 'wb'])
 
 	:param	string	$path: File path
 	:param	string	$data: Data to write to file
 	:param	string	$mode: ``fopen()`` mode
 	:returns:	bool
 
-Writes data to the file specified in the path. If the file does not exist then the
-function will create it.
+	Writes data to the file specified in the path. If the file does not exist then the
+	function will create it.
 
-Example::
+	Example::
 
-	$data = 'Some file data';
-	if ( ! write_file('./path/to/file.php', $data))
-	{     
-		echo 'Unable to write the file';
-	}
-	else
-	{     
-		echo 'File written!';
-	}
+		$data = 'Some file data';
+		if ( ! write_file('./path/to/file.php', $data))
+		{     
+			echo 'Unable to write the file';
+		}
+		else
+		{     
+			echo 'File written!';
+		}
 
-You can optionally set the write mode via the third parameter::
+	You can optionally set the write mode via the third parameter::
 
-	write_file('./path/to/file.php', $data, 'r+');
+		write_file('./path/to/file.php', $data, 'r+');
 
-The default mode is 'wb'. Please see the `PHP user guide <http://php.net/fopen>`_
-for mode options.
+	The default mode is 'wb'. Please see the `PHP user guide <http://php.net/fopen>`_
+	for mode options.
 
-.. note: In order for this function to write data to a file, its permissions must
-	be set such that it is writable (666, 777, etc.). If the file does not
-	already exist, the directory containing it must be writable.
+	.. note: In order for this function to write data to a file, its permissions must
+		be set such that it is writable (666, 777, etc.). If the file does not
+		already exist, the directory containing it must be writable.
 
-.. note:: The path is relative to your main site index.php file, NOT your
-	controller or view files. CodeIgniter uses a front controller so paths
-	are always relative to the main site index.
+	.. note:: The path is relative to your main site index.php file, NOT your
+		controller or view files. CodeIgniter uses a front controller so paths
+		are always relative to the main site index.
 
-.. note:: This function acquires an exclusive lock on the file while writing to it.
+	.. note:: This function acquires an exclusive lock on the file while writing to it.
 
-delete_files()
-==============
 
-.. php:function:: delete_files($path, $del_dir = FALSE, $htdocs = FALSE)
+.. function:: delete_files($path[, $del_dir = FALSE[, $htdocs = FALSE]])
 
 	:param	string	$path: Directory path
 	:param	bool	$del_dir: Whether to also delete directories
 	:param	bool	$htdocs: Whether to skip deleting .htaccess and index page files
 	:returns:	bool
 
-Deletes ALL files contained in the supplied path.
+	Deletes ALL files contained in the supplied path.
 
-Example::
+	Example::
 
-	delete_files('./path/to/directory/');
+		delete_files('./path/to/directory/');
 
-If the second parameter is set to TRUE, any directories contained within the supplied
-root path will be deleted as well.
+	If the second parameter is set to TRUE, any directories contained within the supplied
+	root path will be deleted as well.
 
-Example::
+	Example::
 
-	delete_files('./path/to/directory/', TRUE);
+		delete_files('./path/to/directory/', TRUE);
 
-.. note:: The files must be writable or owned by the system in order to be deleted.
+	.. note:: The files must be writable or owned by the system in order to be deleted.
 
-get_filenames()
-===============
 
-.. php:function:: get_filenames($source_dir, $include_path = FALSE)
+.. function:: get_filenames($source_dir[, $include_path = FALSE])
 
 	:param	string	$source_dir: Directory path
 	:param	bool	$include_path: Whether to include the path as part of the filenames
 	:returns:	array
 
-Takes a server path as input and returns an array containing the names of all files
-contained within it. The file path can optionally be added to the file names by setting
-the second parameter to TRUE.
+	Takes a server path as input and returns an array containing the names of all files
+	contained within it. The file path can optionally be added to the file names by setting
+	the second parameter to TRUE.
 
-Example::
+	Example::
 
-	$controllers = get_filenames(APPPATH.'controllers/');
+		$controllers = get_filenames(APPPATH.'controllers/');
 
-get_dir_file_info()
-===================
 
-.. php:function:: get_dir_file_info($source_dir, $top_level_only)
+.. function:: get_dir_file_info($source_dir, $top_level_only)
 
 	:param	string	$source_dir: Directory path
 	:param	bool	$top_level_only: Whether to look only at the specified directory
 			(excluding sub-directories)
 	:returns:	array
 
-Reads the specified directory and builds an array containing the filenames, filesize,
-dates, and permissions. Sub-folders contained within the specified path are only read
-if forced by sending the second parameter to FALSE, as this can be an intensive
-operation.
+	Reads the specified directory and builds an array containing the filenames, filesize,
+	dates, and permissions. Sub-folders contained within the specified path are only read
+	if forced by sending the second parameter to FALSE, as this can be an intensive
+	operation.
 
-Example::
+	Example::
 
-	$models_info = get_dir_file_info(APPPATH.'models/');
+		$models_info = get_dir_file_info(APPPATH.'models/');
 
-get_file_info()
-===============
 
-.. php:function: get_file_info($file, $returned_values = array('name', 'server_path', 'size', 'date'))
+.. function:: get_file_info($file[, $returned_values = array('name', 'server_path', 'size', 'date')])
 
 	:param	string	$file: File path
 	:param	array	$returned_values: What type of info to return
 	:returns:	array or FALSE on failure
 
-Given a file and path, returns (optionally) the *name*, *path*, *size* and *date modified*
-information attributes for a file. Second parameter allows you to explicitly declare what
-information you want returned.
+	Given a file and path, returns (optionally) the *name*, *path*, *size* and *date modified*
+	information attributes for a file. Second parameter allows you to explicitly declare what
+	information you want returned.
 
-Valid ``$returned_values`` options are: `name`, `size`, `date`, `readable`, `writeable`,
-`executable` and `fileperms`.
+	Valid ``$returned_values`` options are: `name`, `size`, `date`, `readable`, `writeable`,
+	`executable` and `fileperms`.
 
-.. note:: The *writable* attribute is checked via PHP's ``is_writeable()`` function, which
-	known to have issues on the IIS webserver. Consider using *fileperms* instead,
-	which returns information from PHP's ``fileperms()`` function.
+	.. note:: The *writable* attribute is checked via PHP's ``is_writeable()`` function, which
+		known to have issues on the IIS webserver. Consider using *fileperms* instead,
+		which returns information from PHP's ``fileperms()`` function.
 
-get_mime_by_extension()
-=======================
-
-.. php:function:: get_mime_by_extension($filename)
+.. function:: get_mime_by_extension($filename)
 
 	:param	string	$filename: File name
 	:returns:	string or FALSE on failure
 
-Translates a filename extension into a MIME type based on *config/mimes.php*.
-Returns FALSE if it can't determine the type, or read the MIME config file.
+	Translates a filename extension into a MIME type based on *config/mimes.php*.
+	Returns FALSE if it can't determine the type, or read the MIME config file.
 
-::
+	::
 
-	$file = 'somefile.png';
-	echo $file.' is has a mime type of '.get_mime_by_extension($file);
+		$file = 'somefile.png';
+		echo $file.' is has a mime type of '.get_mime_by_extension($file);
 
-.. note:: This is not an accurate way of determining file MIME types, and
-	is here strictly for convenience. It should not be used for security
-	purposes.
+	.. note:: This is not an accurate way of determining file MIME types, and
+		is here strictly for convenience. It should not be used for security
+		purposes.
 
-symbolic_permissions()
-======================
 
-.. php:function:: symbolic_permissions($perms)
+.. function:: symbolic_permissions($perms)
 
 	:param	int	$perms: Permissions
 	:returns:	string
 
-Takes numeric permissions (such as is returned by ``fileperms()``) and returns
-standard symbolic notation of file permissions.
+	Takes numeric permissions (such as is returned by ``fileperms()``) and returns
+	standard symbolic notation of file permissions.
 
-::
+	::
 
-	echo symbolic_permissions(fileperms('./index.php'));  // -rw-r--r--
+		echo symbolic_permissions(fileperms('./index.php'));  // -rw-r--r--
 
-octal_permissions()
-===================
 
-.. php:function:: octal_permissions($perms)
+.. function:: octal_permissions($perms)
 
 	:param	int	$perms: Permissions
 	:returns:	string
 
-Takes numeric permissions (such as is returned by ``fileperms()``) and returns
-a three character octal notation of file permissions.
+	Takes numeric permissions (such as is returned by ``fileperms()``) and returns
+	a three character octal notation of file permissions.
 
-::
+	::
 
-	echo octal_permissions(fileperms('./index.php')); // 644
\ No newline at end of file
+		echo octal_permissions(fileperms('./index.php')); // 644
\ No newline at end of file
diff --git a/user_guide_src/source/helpers/form_helper.rst b/user_guide_src/source/helpers/form_helper.rst
index f49027b..dcb5bee 100644
--- a/user_guide_src/source/helpers/form_helper.rst
+++ b/user_guide_src/source/helpers/form_helper.rst
@@ -5,7 +5,12 @@
 The Form Helper file contains functions that assist in working with
 forms.
 
-.. contents:: Page Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 Loading this Helper
 ===================
@@ -14,239 +19,224 @@
 
 	$this->load->helper('form');
 
+Available Functions
+===================
+
 The following functions are available:
 
-form_open()
-===========
 
-.. php:function:: form_open($action = '', $attributes = '', $hidden = array())
+.. function:: form_open([$action = ''[, $attributes = ''[, $hidden = array()]]])
 
 	:param	string	$action: Form action/target URI string
 	:param	array	$attributes: HTML attributes
 	:param	array	$hidden: An array of hidden fields' definitions
 	:returns:	string
 
-Creates an opening form tag with a base URL **built from your config preferences**.
-It will optionally let you add form attributes and hidden input fields, and
-will always add the `accept-charset` attribute based on the charset value in your
-config file.
+	Creates an opening form tag with a base URL **built from your config preferences**.
+	It will optionally let you add form attributes and hidden input fields, and
+	will always add the `accept-charset` attribute based on the charset value in your
+	config file.
 
-The main benefit of using this tag rather than hard coding your own HTML is that
-it permits your site to be more portable in the event your URLs ever change.
+	The main benefit of using this tag rather than hard coding your own HTML is that
+	it permits your site to be more portable in the event your URLs ever change.
 
-Here's a simple example::
+	Here's a simple example::
 
-	echo form_open('email/send');
+		echo form_open('email/send');
 
-The above example would create a form that points to your base URL plus the
-"email/send" URI segments, like this::
+	The above example would create a form that points to your base URL plus the
+	"email/send" URI segments, like this::
 
-	<form method="post" accept-charset="utf-8" action="http://example.com/index.php/email/send">
+		<form method="post" accept-charset="utf-8" action="http://example.com/index.php/email/send">
 
-Adding Attributes
-^^^^^^^^^^^^^^^^^
+	**Adding Attributes**
 
-Attributes can be added by passing an associative array to the second
-parameter, like this::
+		Attributes can be added by passing an associative array to the second
+		parameter, like this::
 
-	$attributes = array('class' => 'email', 'id' => 'myform');
-	echo form_open('email/send', $attributes);
+			$attributes = array('class' => 'email', 'id' => 'myform');
+			echo form_open('email/send', $attributes);
 
-Alternatively, you can specify the second parameter as a string::
+		Alternatively, you can specify the second parameter as a string::
 
-	echo form_open('email/send', 'class="email" id="myform"');
+			echo form_open('email/send', 'class="email" id="myform"');
 
-The above examples would create a form similar to this::
+		The above examples would create a form similar to this::
 
-	<form method="post" accept-charset="utf-8" action="http://example.com/index.php/email/send" class="email" id="myform">
+			<form method="post" accept-charset="utf-8" action="http://example.com/index.php/email/send" class="email" id="myform">
 
-Adding Hidden Input Fields
-^^^^^^^^^^^^^^^^^^^^^^^^^^
+	**Adding Hidden Input Fields**
 
-Hidden fields can be added by passing an associative array to the
-third parameter, like this::
+		Hidden fields can be added by passing an associative array to the
+		third parameter, like this::
 
-	$hidden = array('username' => 'Joe', 'member_id' => '234');
-	echo form_open('email/send', '', $hidden);
+			$hidden = array('username' => 'Joe', 'member_id' => '234');
+			echo form_open('email/send', '', $hidden);
 
-You can skip the second parameter by passing any falsy value to it.
+		You can skip the second parameter by passing any falsy value to it.
 
-The above example would create a form similar to this::
+		The above example would create a form similar to this::
 
-	<form method="post" accept-charset="utf-8" action="http://example.com/index.php/email/send">
-		<input type="hidden" name="username" value="Joe" />
-		<input type="hidden" name="member_id" value="234" />
+			<form method="post" accept-charset="utf-8" action="http://example.com/index.php/email/send">
+				<input type="hidden" name="username" value="Joe" />
+				<input type="hidden" name="member_id" value="234" />
 
-form_open_multipart()
-=====================
 
-.. php:function:: form_open_multipart($action = '', $attributes = array(), $hidden = array())
+.. function:: form_open_multipart([$action = ''[, $attributes = array()[, $hidden = array()]])
 
 	:param	string	$action: Form action/target URI string
 	:param	array	$attributes: HTML attributes
 	:param	array	$hidden: An array of hidden fields' definitions
 	:returns:	string
 
-This function is absolutely identical to :php:func:`form_open()` above,
-except that it adds a *multipart* attribute, which is necessary if you
-would like to use the form to upload files with.
+	This function is absolutely identical to :func:`form_open()` above,
+	except that it adds a *multipart* attribute, which is necessary if you
+	would like to use the form to upload files with.
 
-form_hidden()
-=============
 
-.. php:function:: form_hidden($name, $value = '')
+.. function:: form_hidden($name[, $value = ''])
 
 	:param	string	$name: Field name
 	:param	string	$value: Field value
 	:returns:	string
 
-Lets you generate hidden input fields. You can either submit a
-name/value string to create one field::
+	Lets you generate hidden input fields. You can either submit a
+	name/value string to create one field::
 
-	form_hidden('username', 'johndoe');
-	// Would produce: <input type="hidden" name="username" value="johndoe" />
+		form_hidden('username', 'johndoe');
+		// Would produce: <input type="hidden" name="username" value="johndoe" />
 
-... or you can submit an associative array to create multiple fields::
+	... or you can submit an associative array to create multiple fields::
 
-	$data = array(
-		'name'	=> 'John Doe',
-		'email'	=> 'john@example.com',
-		'url'	=> 'http://example.com'
-	);
+		$data = array(
+			'name'	=> 'John Doe',
+			'email'	=> 'john@example.com',
+			'url'	=> 'http://example.com'
+		);
 
-	echo form_hidden($data);
+		echo form_hidden($data);
 
-	/*
-		Would produce:
-		<input type="hidden" name="name" value="John Doe" />
-		<input type="hidden" name="email" value="john@example.com" />
-		<input type="hidden" name="url" value="http://example.com" />
-	*/
+		/*
+			Would produce:
+			<input type="hidden" name="name" value="John Doe" />
+			<input type="hidden" name="email" value="john@example.com" />
+			<input type="hidden" name="url" value="http://example.com" />
+		*/
 
-You can also pass an associative array to the value field::
+	You can also pass an associative array to the value field::
 
-	$data = array(
-		'name'	=> 'John Doe',
-		'email'	=> 'john@example.com',
-		'url'	=> 'http://example.com'
-	);
+		$data = array(
+			'name'	=> 'John Doe',
+			'email'	=> 'john@example.com',
+			'url'	=> 'http://example.com'
+		);
 
-	echo form_hidden('my_array', $data);
+		echo form_hidden('my_array', $data);
 
-	/*
-		Would produce:
+		/*
+			Would produce:
 
-		<input type="hidden" name="my_array[name]" value="John Doe" />
-		<input type="hidden" name="my_array[email]" value="john@example.com" />
-		<input type="hidden" name="my_array[url]" value="http://example.com" />
-	*/
+			<input type="hidden" name="my_array[name]" value="John Doe" />
+			<input type="hidden" name="my_array[email]" value="john@example.com" />
+			<input type="hidden" name="my_array[url]" value="http://example.com" />
+		*/
 
-If you want to create hidden input fields with extra attributes::
+	If you want to create hidden input fields with extra attributes::
 
-	$data = array(
-		'type'	=> 'hidden',
-		'name'	=> 'email',
-		'id'	=> 'hiddenemail',
-		'value'	=> 'john@example.com',
-		'class'	=> 'hiddenemail'
-	);
+		$data = array(
+			'type'	=> 'hidden',
+			'name'	=> 'email',
+			'id'	=> 'hiddenemail',
+			'value'	=> 'john@example.com',
+			'class'	=> 'hiddenemail'
+		);
 
-	echo form_input($data);
+		echo form_input($data);
 
-	/*
-		Would produce:
+		/*
+			Would produce:
 
-		<input type="hidden" name="email" value="john@example.com" id="hiddenemail" class="hiddenemail" />
-	*/
+			<input type="hidden" name="email" value="john@example.com" id="hiddenemail" class="hiddenemail" />
+		*/
 
-form_input()
-============
 
-.. php:function:: form_input($data = '', $value = '', $extra = '')
+.. function:: form_input([$data = ''[, $value = ''[, $extra = '']])
 
 	:param	array	$data: Field attributes data
 	:param	string	$value: Field value
 	:param	string	$extra: Extra attributes to be added to the tag *as is*
 	:returns:	string
 
-Lets you generate a standard text input field. You can minimally pass
-the field name and value in the first and second parameter::
+	Lets you generate a standard text input field. You can minimally pass
+	the field name and value in the first and second parameter::
 
-	echo form_input('username', 'johndoe');
+		echo form_input('username', 'johndoe');
 
-Or you can pass an associative array containing any data you wish your
-form to contain::
+	Or you can pass an associative array containing any data you wish your
+	form to contain::
 
-	$data = array(
-		'name'		=> 'username',
-		'id'		=> 'username',
-		'value'		=> 'johndoe',
-		'maxlength'	=> '100',
-		'size'		=> '50',
-		'style'		=> 'width:50%'
-	);
+		$data = array(
+			'name'		=> 'username',
+			'id'		=> 'username',
+			'value'		=> 'johndoe',
+			'maxlength'	=> '100',
+			'size'		=> '50',
+			'style'		=> 'width:50%'
+		);
 
-	echo form_input($data);
+		echo form_input($data);
 
-	/*
-		Would produce:
+		/*
+			Would produce:
 
-		<input type="text" name="username" value="johndoe" id="username" maxlength="100" size="50" style="width:50%"  />
-	*/
+			<input type="text" name="username" value="johndoe" id="username" maxlength="100" size="50" style="width:50%"  />
+		*/
 
-If you would like your form to contain some additional data, like
-JavaScript, you can pass it as a string in the third parameter::
+	If you would like your form to contain some additional data, like
+	JavaScript, you can pass it as a string in the third parameter::
 
-	$js = 'onClick="some_function()"';
-	echo form_input('username', 'johndoe', $js);
+		$js = 'onClick="some_function()"';
+		echo form_input('username', 'johndoe', $js);
 
-form_password()
-===============
 
-.. php:function:: form_password($data = '', $value = '', $extra = '')
+.. function:: form_password([$data = ''[, $value = ''[, $extra = '']]])
 
 	:param	array	$data: Field attributes data
 	:param	string	$value: Field value
 	:param	string	$extra: Extra attributes to be added to the tag *as is*
 	:returns:	string
 
-This function is identical in all respects to the :php:func:`form_input()`
-function above except that it uses the "password" input type.
+	This function is identical in all respects to the :func:`form_input()`
+	function above except that it uses the "password" input type.
 
-form_upload()
-=============
 
-.. php:function:: form_upload($data = '', $value = '', $extra = '')
+.. function:: form_upload([$data = ''[, $value = ''[, $extra = '']]])
 
 	:param	array	$data: Field attributes data
 	:param	string	$value: Field value
 	:param	string	$extra: Extra attributes to be added to the tag *as is*
 	:returns:	string
 
-This function is identical in all respects to the :php:func:`form_input()`
-function above except that it uses the "file" input type, allowing it to
-be used to upload files.
+	This function is identical in all respects to the :func:`form_input()`
+	function above except that it uses the "file" input type, allowing it to
+	be used to upload files.
 
-form_textarea()
-===============
 
-.. php:function:: form_textarea($data = '', $value = '', $extra = '')
+.. function:: form_textarea([$data = ''[, $value = ''[, $extra = '']]])
 
 	:param	array	$data: Field attributes data
 	:param	string	$value: Field value
 	:param	string	$extra: Extra attributes to be added to the tag *as is*
 	:returns:	string
 
-This function is identical in all respects to the :php:func:`form_input()`
-function above except that it generates a "textarea" type.
+	This function is identical in all respects to the :func:`form_input()`
+	function above except that it generates a "textarea" type.
 
-.. note: Instead of the *maxlength* and *size* attributes in the above example,
-	you will instead specify *rows* and *cols*.
+	.. note:: Instead of the *maxlength* and *size* attributes in the above example,
+		you will instead specify *rows* and *cols*.
 
-form_dropdown()
-===============
 
-.. php:function:: form_dropdown($name = '', $options = array(), $selected = array(), $extra = '')
+.. function:: form_dropdown([$name = ''[, $options = array()[, $selected = array()[, $extra = '']]]])
 
 	:param	string	$name: Field name
 	:param	array	$options: An associative array of options to be listed
@@ -254,64 +244,62 @@
 	:param	string	$extra: Extra attributes to be added to the tag *as is*
 	:returns:	string
 
-Lets you create a standard drop-down field. The first parameter will
-contain the name of the field, the second parameter will contain an
-associative array of options, and the third parameter will contain the
-value you wish to be selected. You can also pass an array of multiple
-items through the third parameter, and CodeIgniter will create a
-multiple select for you.
+	Lets you create a standard drop-down field. The first parameter will
+	contain the name of the field, the second parameter will contain an
+	associative array of options, and the third parameter will contain the
+	value you wish to be selected. You can also pass an array of multiple
+	items through the third parameter, and CodeIgniter will create a
+	multiple select for you.
 
-Example::
+	Example::
 
-	$options = array(
-		'small'		=> 'Small Shirt',
-		'med'		=> 'Medium Shirt',
-		'large'		=> 'Large Shirt',
-		'xlarge'	=> 'Extra Large Shirt',
-	);
+		$options = array(
+			'small'		=> 'Small Shirt',
+			'med'		=> 'Medium Shirt',
+			'large'		=> 'Large Shirt',
+			'xlarge'	=> 'Extra Large Shirt',
+		);
 
-	$shirts_on_sale = array('small', 'large');
-	echo form_dropdown('shirts', $options, 'large');
+		$shirts_on_sale = array('small', 'large');
+		echo form_dropdown('shirts', $options, 'large');
 
-	/*
-		Would produce:
+		/*
+			Would produce:
 
-		<select name="shirts">
-			<option value="small">Small Shirt</option>
-			<option value="med">Medium  Shirt</option>
-			<option value="large" selected="selected">Large Shirt</option>
-			<option value="xlarge">Extra Large Shirt</option>
-		</select>
-	*/
+			<select name="shirts">
+				<option value="small">Small Shirt</option>
+				<option value="med">Medium  Shirt</option>
+				<option value="large" selected="selected">Large Shirt</option>
+				<option value="xlarge">Extra Large Shirt</option>
+			</select>
+		*/
 
-	echo form_dropdown('shirts', $options, $shirts_on_sale);
+		echo form_dropdown('shirts', $options, $shirts_on_sale);
 
-	/*
-		Would produce:
+		/*
+			Would produce:
 
-		<select name="shirts" multiple="multiple">
-			<option value="small" selected="selected">Small Shirt</option>
-			<option value="med">Medium  Shirt</option>
-			<option value="large" selected="selected">Large Shirt</option>
-			<option value="xlarge">Extra Large Shirt</option>
-		</select>
-	*/
+			<select name="shirts" multiple="multiple">
+				<option value="small" selected="selected">Small Shirt</option>
+				<option value="med">Medium  Shirt</option>
+				<option value="large" selected="selected">Large Shirt</option>
+				<option value="xlarge">Extra Large Shirt</option>
+			</select>
+		*/
 
-If you would like the opening <select> to contain additional data, like
-an id attribute or JavaScript, you can pass it as a string in the fourth
-parameter::
+	If you would like the opening <select> to contain additional data, like
+	an id attribute or JavaScript, you can pass it as a string in the fourth
+	parameter::
 
-	$js = 'id="shirts" onChange="some_function();"';
-	echo form_dropdown('shirts', $options, 'large', $js);
+		$js = 'id="shirts" onChange="some_function();"';
+		echo form_dropdown('shirts', $options, 'large', $js);
 
-If the array passed as ``$options`` is a multidimensional array, then
-``form_dropdown()`` will produce an <optgroup> with the array key as the
-label.
+	If the array passed as ``$options`` is a multidimensional array, then
+	``form_dropdown()`` will produce an <optgroup> with the array key as the
+	label.
 
-form_multiselect()
-==================
 
-.. php:function:: form_multiselect($name = '', $options = array(), $selected = array(), $extra = '')
+.. function:: form_multiselect([$name = ''[, $options = array()[, $selected = array()[, $extra = '']]]])
 
 	:param	string	$name: Field name
 	:param	array	$options: An associative array of options to be listed
@@ -319,84 +307,78 @@
 	:param	string	$extra: Extra attributes to be added to the tag *as is*
 	:returns:	string
 
-Lets you create a standard multiselect field. The first parameter will
-contain the name of the field, the second parameter will contain an
-associative array of options, and the third parameter will contain the
-value or values you wish to be selected.
+	Lets you create a standard multiselect field. The first parameter will
+	contain the name of the field, the second parameter will contain an
+	associative array of options, and the third parameter will contain the
+	value or values you wish to be selected.
 
-The parameter usage is identical to using :php:func:`form_dropdown()` above,
-except of course that the name of the field will need to use POST array
-syntax, e.g. foo[].
+	The parameter usage is identical to using :func:`form_dropdown()` above,
+	except of course that the name of the field will need to use POST array
+	syntax, e.g. foo[].
 
-form_fieldset()
-===============
 
-.. php:function:: form_fieldset($legend_text = '', $attributes = array())
+.. function:: form_fieldset([$legend_text = ''[, $attributes = array()]])
 
 	:param	string	$legend_text: Text to put in the <legend> tag
 	:param	array	$attributes: Attributes to be set on the <fieldset> tag
 	:returns:	string
 
-Lets you generate fieldset/legend fields.
+	Lets you generate fieldset/legend fields.
 
-Example::
+	Example::
 
-	echo form_fieldset('Address Information');
-	echo "<p>fieldset content here</p>\n";
-	echo form_fieldset_close();
+		echo form_fieldset('Address Information');
+		echo "<p>fieldset content here</p>\n";
+		echo form_fieldset_close();
 
-	/*
-		Produces:
+		/*
+			Produces:
 
-			<fieldset>
+				<fieldset>
+					<legend>Address Information</legend>
+						<p>form content here</p>
+				</fieldset>
+		*/
+
+	Similar to other functions, you can submit an associative array in the
+	second parameter if you prefer to set additional attributes::
+
+		$attributes = array(
+			'id'	=> 'address_info',
+			'class'	=> 'address_info'
+		);
+
+		echo form_fieldset('Address Information', $attributes);
+		echo "<p>fieldset content here</p>\n";
+		echo form_fieldset_close();
+
+		/*
+			Produces:
+
+			<fieldset id="address_info" class="address_info">
 				<legend>Address Information</legend>
-					<p>form content here</p>
+				<p>form content here</p>
 			</fieldset>
-	*/
+		*/
 
-Similar to other functions, you can submit an associative array in the
-second parameter if you prefer to set additional attributes::
 
-	$attributes = array(
-		'id'	=> 'address_info',
-		'class'	=> 'address_info'
-	);
-
-	echo form_fieldset('Address Information', $attributes);
-	echo "<p>fieldset content here</p>\n";
-	echo form_fieldset_close();
-
-	/*
-		Produces:
-
-		<fieldset id="address_info" class="address_info">
-			<legend>Address Information</legend>
-			<p>form content here</p>
-		</fieldset>
-	*/
-
-form_fieldset_close()
-=====================
-
-.. php:function:: form_fieldset_close($extra = '')
+.. function:: form_fieldset_close([$extra = ''])
 
 	:param	string	$extra: Anything to append after the closing tag, *as is*
 	:returns:	string
 
-Produces a closing </fieldset> tag. The only advantage to using this
-function is it permits you to pass data to it which will be added below
-the tag. For example
+	Produces a closing </fieldset> tag. The only advantage to using this
+	function is it permits you to pass data to it which will be added below
+	the tag. For example
 
-::
+	::
 
-	$string = '</div></div>';
-	echo form_fieldset_close($string);
-	// Would produce: </fieldset></div></div>
+		$string = '</div></div>';
+		echo form_fieldset_close($string);
+		// Would produce: </fieldset></div></div>
 
-form_checkbox()
-===============
 
-.. php:function:: form_checkbox($data = '', $value = '', $checked = FALSE, $extra = '')
+.. function:: form_checkbox([$data = ''[, $value = ''[, $checked = FALSE[, $extra = '']]]])
 
 	:param	array	$data: Field attributes data
 	:param	string	$value: Field value
@@ -404,39 +386,37 @@
 	:param	string	$extra: Extra attributes to be added to the tag *as is*
 	:returns:	string
 
-Lets you generate a checkbox field. Simple example::
+	Lets you generate a checkbox field. Simple example::
 
-	echo form_checkbox('newsletter', 'accept', TRUE);
-	// Would produce:  <input type="checkbox" name="newsletter" value="accept" checked="checked" />
+		echo form_checkbox('newsletter', 'accept', TRUE);
+		// Would produce:  <input type="checkbox" name="newsletter" value="accept" checked="checked" />
 
-The third parameter contains a boolean TRUE/FALSE to determine whether
-the box should be checked or not.
+	The third parameter contains a boolean TRUE/FALSE to determine whether
+	the box should be checked or not.
 
-Similar to the other form functions in this helper, you can also pass an
-array of attributes to the function::
+	Similar to the other form functions in this helper, you can also pass an
+	array of attributes to the function::
 
-	$data = array(
-		'name'		=> 'newsletter',
-		'id'		=> 'newsletter',
-		'value'		=> 'accept',
-		'checked'	=> TRUE,
-		'style'		=> 'margin:10px'
-	);
+		$data = array(
+			'name'		=> 'newsletter',
+			'id'		=> 'newsletter',
+			'value'		=> 'accept',
+			'checked'	=> TRUE,
+			'style'		=> 'margin:10px'
+		);
 
-	echo form_checkbox($data);
-	// Would produce: <input type="checkbox" name="newsletter" id="newsletter" value="accept" checked="checked" style="margin:10px" />
+		echo form_checkbox($data);
+		// Would produce: <input type="checkbox" name="newsletter" id="newsletter" value="accept" checked="checked" style="margin:10px" />
 
-Also as with other functions, if you would like the tag to contain
-additional data like JavaScript, you can pass it as a string in the
-fourth parameter::
+	Also as with other functions, if you would like the tag to contain
+	additional data like JavaScript, you can pass it as a string in the
+	fourth parameter::
 
-	$js = 'onClick="some_function()"';
-	echo form_checkbox('newsletter', 'accept', TRUE, $js)
+		$js = 'onClick="some_function()"';
+		echo form_checkbox('newsletter', 'accept', TRUE, $js)
 
-form_radio()
-============
 
-.. php:function:: form_radio($data = '', $value = '', $checked = FALSE, $extra = '')
+.. function:: form_radio([$data = ''[, $value = ''[, $checked = FALSE[, $extra = '']]]])
 
 	:param	array	$data: Field attributes data
 	:param	string	$value: Field value
@@ -444,283 +424,259 @@
 	:param	string	$extra: Extra attributes to be added to the tag *as is*
 	:returns:	string
 
-This function is identical in all respects to the :php:func:`form_checkbox()`
-function above except that it uses the "radio" input type.
+	This function is identical in all respects to the :func:`form_checkbox()`
+	function above except that it uses the "radio" input type.
 
-form_label()
-============
 
-.. php:function:: form_label($label_text = '', $id = '', $attributes = array())
+.. function:: form_label([$label_text = ''[, $id = ''[, $attributes = array()]]])
 
 	:param	string	$label_text: Text to put in the <label> tag
 	:param	string	$id: ID of the form element that we're making a label for
 	:param	string	$attributes: HTML attributes
 	:returns:	string
 
-Lets you generate a <label>. Simple example::
+	Lets you generate a <label>. Simple example::
 
-	echo form_label('What is your Name', 'username');
-	// Would produce:  <label for="username">What is your Name</label>
+		echo form_label('What is your Name', 'username');
+		// Would produce:  <label for="username">What is your Name</label>
 
-Similar to other functions, you can submit an associative array in the
-third parameter if you prefer to set additional attributes.
+	Similar to other functions, you can submit an associative array in the
+	third parameter if you prefer to set additional attributes.
 
-Example::
+	Example::
 
-	$attributes = array(
-		'class' => 'mycustomclass',
-		'style' => 'color: #000;'
-	);
+		$attributes = array(
+			'class' => 'mycustomclass',
+			'style' => 'color: #000;'
+		);
 
-	echo form_label('What is your Name', 'username', $attributes);
-	// Would produce:  <label for="username" class="mycustomclass" style="color: #000;">What is your Name</label>
+		echo form_label('What is your Name', 'username', $attributes);
+		// Would produce:  <label for="username" class="mycustomclass" style="color: #000;">What is your Name</label>
 
-form_submit()
-=============
 
-.. php:function:: form_submit($data = '', $value = '', $extra = '')
+.. function:: form_submit([$data = ''[, $value = ''[, $extra = '']]])
 
 	:param	string	$data: Button name
 	:param	string	$value: Button value
 	:param	string	$extra: Extra attributes to be added to the tag *as is*
 	:returns:	string
 
-Lets you generate a standard submit button. Simple example::
+	Lets you generate a standard submit button. Simple example::
 
-	echo form_submit('mysubmit', 'Submit Post!');
-	// Would produce:  <input type="submit" name="mysubmit" value="Submit Post!" />
+		echo form_submit('mysubmit', 'Submit Post!');
+		// Would produce:  <input type="submit" name="mysubmit" value="Submit Post!" />
 
-Similar to other functions, you can submit an associative array in the
-first parameter if you prefer to set your own attributes. The third
-parameter lets you add extra data to your form, like JavaScript.
+	Similar to other functions, you can submit an associative array in the
+	first parameter if you prefer to set your own attributes. The third
+	parameter lets you add extra data to your form, like JavaScript.
 
-form_reset()
-============
 
-.. php:function:: form_reset($data = '', $value = '', $extra = '')
+.. function:: form_reset([$data = ''[, $value = ''[, $extra = '']]])
 
 	:param	string	$data: Button name
 	:param	string	$value: Button value
 	:param	string	$extra: Extra attributes to be added to the tag *as is*
 	:returns:	string
 
-Lets you generate a standard reset button. Use is identical to
-:php:func:`form_submit()`.
+	Lets you generate a standard reset button. Use is identical to
+	:func:`form_submit()`.
 
-form_button()
-=============
 
-.. php:function:: form_button($data = '', $content = '', $extra = '')
+.. function:: form_button([$data = ''[, $content = ''[, $extra = '']]])
 
 	:param	string	$data: Button name
 	:param	string	$content: Button label
 	:param	string	$extra: Extra attributes to be added to the tag *as is*
 	:returns:	string
 
-Lets you generate a standard button element. You can minimally pass the
-button name and content in the first and second parameter::
+	Lets you generate a standard button element. You can minimally pass the
+	button name and content in the first and second parameter::
 
-	echo form_button('name','content');
-	// Would produce: <button name="name" type="button">Content</button>
+		echo form_button('name','content');
+		// Would produce: <button name="name" type="button">Content</button>
 
-Or you can pass an associative array containing any data you wish your
-form to contain::
+	Or you can pass an associative array containing any data you wish your
+	form to contain::
 
-	$data = array(
-		'name'		=> 'button',
-		'id'		=> 'button',
-		'value'		=> 'true',
-		'type'		=> 'reset',
-		'content'	=> 'Reset'
-	);
+		$data = array(
+			'name'		=> 'button',
+			'id'		=> 'button',
+			'value'		=> 'true',
+			'type'		=> 'reset',
+			'content'	=> 'Reset'
+		);
 
-	echo form_button($data);
-	// Would produce: <button name="button" id="button" value="true" type="reset">Reset</button>
+		echo form_button($data);
+		// Would produce: <button name="button" id="button" value="true" type="reset">Reset</button>
 
-If you would like your form to contain some additional data, like
-JavaScript, you can pass it as a string in the third parameter::
+	If you would like your form to contain some additional data, like
+	JavaScript, you can pass it as a string in the third parameter::
 
-	$js = 'onClick="some_function()"';
-	echo form_button('mybutton', 'Click Me', $js);
+		$js = 'onClick="some_function()"';
+		echo form_button('mybutton', 'Click Me', $js);
 
-form_close()
-============
 
-.. php:function:: form_close($extra = '')
+.. function:: form_close([$extra = ''])
 
 	:param	string	$extra: Anything to append after the closing tag, *as is*
 	:returns:	string
 
-Produces a closing </form> tag. The only advantage to using this
-function is it permits you to pass data to it which will be added below
-the tag. For example::
+	Produces a closing </form> tag. The only advantage to using this
+	function is it permits you to pass data to it which will be added below
+	the tag. For example::
 
-	$string = '</div></div>';
-	echo form_close($string);
-	// Would produce:  </form> </div></div>
+		$string = '</div></div>';
+		echo form_close($string);
+		// Would produce:  </form> </div></div>
 
-form_prep()
-===========
 
-.. php:function:: form_prep($str = '', $is_textarea = FALSE)
+.. function:: form_prep([$str = ''[, $is_textarea = FALSE]])
 
 	:param	string	$str: Value to escape
 	:param	bool	$is_textarea: Whether we're preparing for <textarea> or a regular input tag
 	:returns:	string
 
-Allows you to safely use HTML and characters such as quotes within form
-elements without breaking out of the form.
+	Allows you to safely use HTML and characters such as quotes within form
+	elements without breaking out of the form.
 
-Consider this example::
+	Consider this example::
 
-	$string = 'Here is a string containing "quoted" text.';
-	<input type="text" name="myform" value="$string" />
+		$string = 'Here is a string containing "quoted" text.';
+		<input type="text" name="myform" value="$string" />
 
-Since the above string contains a set of quotes it will cause the form
-to break. The ``form_prep()`` function converts HTML so that it can be used
-safely::
+	Since the above string contains a set of quotes it will cause the form
+	to break. The ``form_prep()`` function converts HTML so that it can be used
+	safely::
 
-	<input type="text" name="myform" value="<?php echo form_prep($string); ?>" />
+		<input type="text" name="myform" value="<?php echo form_prep($string); ?>" />
 
-.. note:: If you use any of the form helper functions listed in this page the form
-	values will be prepped automatically, so there is no need to call this
-	function. Use it only if you are creating your own form elements.
+	.. note:: If you use any of the form helper functions listed in this page the form
+		values will be prepped automatically, so there is no need to call this
+		function. Use it only if you are creating your own form elements.
 
-set_value()
-===========
 
-.. php:function:: set_value($field = '', $default = '', $is_textarea = FALSE)
+.. function:: set_value([$field = ''[, $default = ''[, $is_textarea = FALSE]]])
 
 	:param	string	$field: Field name
 	:param	string	$default: Default value
 	:param	bool	$is_textarea: Whether we're setting <textarea> content
 	:returns:	string
 
-Permits you to set the value of an input form or textarea. You must
-supply the field name via the first parameter of the function. The
-second (optional) parameter allows you to set a default value for the
-form.
+	Permits you to set the value of an input form or textarea. You must
+	supply the field name via the first parameter of the function. The
+	second (optional) parameter allows you to set a default value for the
+	form.
 
-Example::
+	Example::
 
-	<input type="text" name="quantity" value="<?=set_value('quantity', '0');?>" size="50" />
+		<input type="text" name="quantity" value="<?=set_value('quantity', '0');?>" size="50" />
 
-The above form will show "0" when loaded for the first time.
+	The above form will show "0" when loaded for the first time.
 
-set_select()
-============
 
-.. php:function:: set_select($field = '', $value = '', $default = FALSE)
+.. function:: set_select([$field = ''[, $value = ''[, $default = FALSE]]])
 
 	:param	string	$field: Field name
 	:param	string	$value: Value to check for
 	:param	string	$default: Whether the value is also a default one
 	:returns:	string
 
-If you use a <select> menu, this function permits you to display the
-menu item that was selected.
+	If you use a <select> menu, this function permits you to display the
+	menu item that was selected.
 
-The first parameter must contain the name of the select menu, the second
-parameter must contain the value of each item, and the third (optional)
-parameter lets you set an item as the default (use boolean TRUE/FALSE).
+	The first parameter must contain the name of the select menu, the second
+	parameter must contain the value of each item, and the third (optional)
+	parameter lets you set an item as the default (use boolean TRUE/FALSE).
 
-Example::
+	Example::
 
-	<select name="myselect">
-		<option value="one" <?php echo  set_select('myselect', 'one', TRUE); ?> >One</option>
-		<option value="two" <?php echo  set_select('myselect', 'two'); ?> >Two</option>
-		<option value="three" <?php echo  set_select('myselect', 'three'); ?> >Three</option>
-	</select>
+		<select name="myselect">
+			<option value="one" <?php echo  set_select('myselect', 'one', TRUE); ?> >One</option>
+			<option value="two" <?php echo  set_select('myselect', 'two'); ?> >Two</option>
+			<option value="three" <?php echo  set_select('myselect', 'three'); ?> >Three</option>
+		</select>
 
-set_checkbox()
-==============
 
-.. php:function:: set_checkbox($field = '', $value = '', $default = FALSE)
+.. function:: set_checkbox([$field = ''[, $value = ''[, $default = FALSE]]])
 
 	:param	string	$field: Field name
 	:param	string	$value: Value to check for
 	:param	string	$default: Whether the value is also a default one
 	:returns:	string
 
-Permits you to display a checkbox in the state it was submitted.
+	Permits you to display a checkbox in the state it was submitted.
 
-The first parameter must contain the name of the checkbox, the second
-parameter must contain its value, and the third (optional) parameter
-lets you set an item as the default (use boolean TRUE/FALSE).
+	The first parameter must contain the name of the checkbox, the second
+	parameter must contain its value, and the third (optional) parameter
+	lets you set an item as the default (use boolean TRUE/FALSE).
 
-Example::
+	Example::
 
-	<input type="checkbox" name="mycheck" value="1" <?php echo set_checkbox('mycheck', '1'); ?> />
-	<input type="checkbox" name="mycheck" value="2" <?php echo set_checkbox('mycheck', '2'); ?> />
+		<input type="checkbox" name="mycheck" value="1" <?php echo set_checkbox('mycheck', '1'); ?> />
+		<input type="checkbox" name="mycheck" value="2" <?php echo set_checkbox('mycheck', '2'); ?> />
 
-set_radio()
-===========
 
-.. php:function:: set_radio($field = '', $value = '', $default = FALSE)
+.. function:: set_radio([$field = ''[, $value = ''[, $default = FALSE]]])
 
 	:param	string	$field: Field name
 	:param	string	$value: Value to check for
 	:param	string	$default: Whether the value is also a default one
 	:returns:	string
 
-Permits you to display radio buttons in the state they were submitted.
-This function is identical to the :php:func:`set_checkbox()` function above.
+	Permits you to display radio buttons in the state they were submitted.
+	This function is identical to the :func:`set_checkbox()` function above.
 
-Example::
+	Example::
 
-	<input type="radio" name="myradio" value="1" <?php echo  set_radio('myradio', '1', TRUE); ?> />
-	<input type="radio" name="myradio" value="2" <?php echo  set_radio('myradio', '2'); ?> />
+		<input type="radio" name="myradio" value="1" <?php echo  set_radio('myradio', '1', TRUE); ?> />
+		<input type="radio" name="myradio" value="2" <?php echo  set_radio('myradio', '2'); ?> />
 
-.. note:: If you are using the Form Validation class, you must always specify
-	a rule for your field, even if empty, in order for the ``set_*()``
-	functions to work. This is because if a Form Validation object is
-	defined, the control for ``set_*()`` is handed over to a method of the
-	class instead of the generic helper function.
+	.. note:: If you are using the Form Validation class, you must always specify
+		a rule for your field, even if empty, in order for the ``set_*()``
+		functions to work. This is because if a Form Validation object is
+		defined, the control for ``set_*()`` is handed over to a method of the
+		class instead of the generic helper function.
 
-form_error()
-============
 
-.. php:function:: form_error($field = '', $prefix = '', $suffix = '')
+.. function:: form_error([$field = ''[, $prefix = ''[, $suffix = '']]])
 
 	:param	string	$field:	Field name
 	:param	string	$prefix: Error opening tag
 	:param	string	$suffix: Error closing tag
 	:returns:	string
 
-Returns a validation error message from the :doc:`Form Validation Library
-<../libraries/form_validation>`, associated with the specified field name.
-You can optionally specify opening and closing tag(s) to put around the error
-message.
+	Returns a validation error message from the :doc:`Form Validation Library
+	<../libraries/form_validation>`, associated with the specified field name.
+	You can optionally specify opening and closing tag(s) to put around the error
+	message.
 
-Example::
+	Example::
 
-	// Assuming that the 'username' field value was incorrect:
-	echo form_error('myfield', '<div class="error">', '</div>');
+		// Assuming that the 'username' field value was incorrect:
+		echo form_error('myfield', '<div class="error">', '</div>');
 
-	// Would produce: <div class="error">Error message associated with the "username" field.</div>
+		// Would produce: <div class="error">Error message associated with the "username" field.</div>
 
-validation_errors()
-===================
 
-.. php:function:: validation_errors($prefix = '', $suffix = '')
+.. function:: validation_errors([$prefix = ''[, $suffix = '']])
 
 	:param	string	$prefix: Error opening tag
 	:param	string	$suffix: Error closing tag
 	:returns:	string
 
-Similarly to the :php:func:`form_error()` function, returns all validation
-error messages produced by the :doc:`Form Validation Library
-<../libraries/form_validation>`, with optional opening and closing tags
-around each of the messages.
+	Similarly to the :func:`form_error()` function, returns all validation
+	error messages produced by the :doc:`Form Validation Library
+	<../libraries/form_validation>`, with optional opening and closing tags
+	around each of the messages.
 
-Example::
+	Example::
 
-	echo validation_errors('<span class="error">', '</span>');
+		echo validation_errors('<span class="error">', '</span>');
 
-	/*
-		Would produce, e.g.:
+		/*
+			Would produce, e.g.:
 
-		<span class="error">The "email" field doesn't contain a valid e-mail address!</span>
-		<span class="error">The "password" field doesn't match the "repeat_password" field!</span>
+			<span class="error">The "email" field doesn't contain a valid e-mail address!</span>
+			<span class="error">The "password" field doesn't match the "repeat_password" field!</span>
 
-	 */
\ No newline at end of file
+		 */
\ No newline at end of file
diff --git a/user_guide_src/source/helpers/html_helper.rst b/user_guide_src/source/helpers/html_helper.rst
index df53ebd..9e9d7ca 100644
--- a/user_guide_src/source/helpers/html_helper.rst
+++ b/user_guide_src/source/helpers/html_helper.rst
@@ -5,7 +5,12 @@
 The HTML Helper file contains functions that assist in working with
 HTML.
 
-.. contents:: Page Contents
+.. contents::
+	:local:
+
+.. raw:: html
+
+	<div class="custom-index container"></div>
 
 Loading this Helper
 ===================
@@ -14,94 +19,95 @@
 
 	$this->load->helper('html');
 
+Available Functions
+===================
+
 The following functions are available:
 
-br()
-====
 
-.. php:function:: br($count = 1)
+.. function:: br([$count = 1])
 
 	:param	int	$count: Number of times to repeat the tag
 	:returns:	string
 
-Generates line break tags (<br />) based on the number you submit.
-Example::
+	Generates line break tags (<br />) based on the number you submit.
+	Example::
 
-	echo br(3);
+		echo br(3);
 
-The above would produce: <br /><br /><br />
+	The above would produce:
 
-heading()
-=========
+	.. code-block:: html
 
-.. php:function:: heading($data = '', $h = '1', $attributes = '')
+		<br /><br /><br />
+
+
+.. function:: heading([$data = ''[, $h = '1'[, $attributes = '']]])
 
 	:param	string	$data: Content
 	:param	string	$h: Heading level
 	:param	array	$attributes: HTML attributes
 	:returns:	string
 
-Lets you create HTML heading tags. The first parameter will contain the
-data, the second the size of the heading. Example::
+	Lets you create HTML heading tags. The first parameter will contain the
+	data, the second the size of the heading. Example::
 
-	echo heading('Welcome!', 3);
+		echo heading('Welcome!', 3);
 
-The above would produce: <h3>Welcome!</h3>
+	The above would produce: <h3>Welcome!</h3>
 
-Additionally, in order to add attributes to the heading tag such as HTML
-classes, ids or inline styles, a third parameter is available::
+	Additionally, in order to add attributes to the heading tag such as HTML
+	classes, ids or inline styles, a third parameter is available::
 
-	echo heading('Welcome!', 3, 'class="pink"')
+		echo heading('Welcome!', 3, 'class="pink"')
 
-The above code produces: <h3 class="pink">Welcome!<<h3>
+	The above code produces:
 
-img()
-=====
+	.. code-block:: html
 
-.. php:function:: img($src = '', $index_page = FALSE, $attributes = '')
+		<h3 class="pink">Welcome!<h3>
+
+
+.. function:: img([$src = ''[, $index_page = FALSE[, $attributes = '']]])
 
 	:param	string	$src: Image source data
 	:param	bool	$index_page: Whether to treat $src as a routed URI string
 	:param	array	$attributes: HTML attributes
 	:returns:	string
 
-Lets you create HTML <img /> tags. The first parameter contains the
-image source. Example::
+	Lets you create HTML <img /> tags. The first parameter contains the
+	image source. Example::
 
-	echo img('images/picture.jpg'); // gives <img src="http://site.com/images/picture.jpg" />
+		echo img('images/picture.jpg'); // gives <img src="http://site.com/images/picture.jpg" />
 
-There is an optional second parameter that is a TRUE/FALSE value that
-specifics if the *src* should have the page specified by
-``$config['index_page']`` added to the address it creates.
-Presumably, this would be if you were using a media controller::
+	There is an optional second parameter that is a TRUE/FALSE value that
+	specifics if the *src* should have the page specified by
+	``$config['index_page']`` added to the address it creates.
+	Presumably, this would be if you were using a media controller::
 
-	echo img('images/picture.jpg', TRUE); // gives <img src="http://site.com/index.php/images/picture.jpg" alt="" />
+		echo img('images/picture.jpg', TRUE); // gives <img src="http://site.com/index.php/images/picture.jpg" alt="" />
+
+	Additionally, an associative array can be passed to the ``img()`` function
+	for complete control over all attributes and values. If an *alt* attribute
+	is not provided, CodeIgniter will generate an empty string.
+
+	Example::
+
+		$image_properties = array(
+			'src' 	=> 'images/picture.jpg',
+			'alt' 	=> 'Me, demonstrating how to eat 4 slices of pizza at one time',
+			'class' => 'post_images',
+			'width' => '200',
+			'height'=> '200',
+			'title' => 'That was quite a night',
+			'rel' 	=> 'lightbox'
+		);
+
+		img($image_properties);
+		// <img src="http://site.com/index.php/images/picture.jpg" alt="Me, demonstrating how to eat 4 slices of pizza at one time" class="post_images" width="200" height="200" title="That was quite a night" rel="lightbox" />
 
 
-Additionally, an associative array can be passed to the ``img()`` function
-for complete control over all attributes and values. If an *alt* attribute
-is not provided, CodeIgniter will generate an empty string.
-
-Example::
-
-	$image_properties = array(               
-		'src' 	=> 'images/picture.jpg',               
-		'alt' 	=> 'Me, demonstrating how to eat 4 slices of pizza at one time',  
-		'class' => 'post_images',               
-		'width' => '200',               
-		'height'=> '200',               
-		'title' => 'That was quite a night',               
-		'rel' 	=> 'lightbox'
-	);
-
-	img($image_properties);
-	// <img src="http://site.com/index.php/images/picture.jpg" alt="Me, demonstrating how to eat 4 slices of pizza at one time" class="post_images" width="200" height="200" title="That was quite a night" rel="lightbox" />
-
-
-link_tag()
-==========
-
-.. php:function:: ling_tag($href = '', $rel = 'stylesheet', $type = 'text/css', $title = '', $media = '', $index_page = FALSE)
+.. function:: ling_tag([$href = ''[, $rel = 'stylesheet'[, $type = 'text/css'[, $title = ''[, $media = ''[, $index_page = FALSE]]]]]])
 
 	:param	string	$href: What are we linking to
 	:param	string	$rel: Relation type
@@ -111,188 +117,187 @@
 	:param	bool	$index_page: Whether to treat $src as a routed URI string
 	:returns:	string
 
-Lets you create HTML <link /> tags. This is useful for stylesheet links,
-as well as other links. The parameters are *href*, with optional *rel*,
-*type*, *title*, *media* and *index_page*.
+	Lets you create HTML <link /> tags. This is useful for stylesheet links,
+	as well as other links. The parameters are *href*, with optional *rel*,
+	*type*, *title*, *media* and *index_page*.
 
-*index_page* is a boolean value that specifies if the *href* should have
-the page specified by ``$config['index_page']`` added to the address it creates.
+	*index_page* is a boolean value that specifies if the *href* should have
+	the page specified by ``$config['index_page']`` added to the address it creates.
 
-Example::
+	Example::
 
-	echo link_tag('css/mystyles.css');
-	// gives <link href="http://site.com/css/mystyles.css" rel="stylesheet" type="text/css" />
+		echo link_tag('css/mystyles.css');
+		// gives <link href="http://site.com/css/mystyles.css" rel="stylesheet" type="text/css" />
+
+	Further examples::
+
+		echo link_tag('favicon.ico', 'shortcut icon', 'image/ico');
+		// <link href="http://site.com/favicon.ico" rel="shortcut icon" type="image/ico" />
+
+		echo link_tag('feed', 'alternate', 'application/rss+xml', 'My RSS Feed');
+		// <link href="http://site.com/feed" rel="alternate" type="application/rss+xml" title="My RSS Feed" />
+
+	Additionally, an associative array can be passed to the ``link()`` function
+	for complete control over all attributes and values::
+
+		$link = array(
+			'href'	=> 'css/printer.css',
+			'rel'	=> 'stylesheet',
+			'type'	=> 'text/css',
+			'media'	=> 'print'
+		);
+
+		echo link_tag($link);
+		// <link href="http://site.com/css/printer.css" rel="stylesheet" type="text/css" media="print" />
 
 
-Further examples::
-
-	echo link_tag('favicon.ico', 'shortcut icon', 'image/ico');
-	// <link href="http://site.com/favicon.ico" rel="shortcut icon" type="image/ico" />
-
-	echo link_tag('feed', 'alternate', 'application/rss+xml', 'My RSS Feed');
-	// <link href="http://site.com/feed" rel="alternate" type="application/rss+xml" title="My RSS Feed" />
-
-Additionally, an associative array can be passed to the ``link()`` function
-for complete control over all attributes and values::
-
-	$link = array(               
-		'href'	=> 'css/printer.css',
-		'rel'	=> 'stylesheet',
-		'type'	=> 'text/css',
-		'media'	=> 'print'
-	);
-
-	echo link_tag($link);
-	// <link href="http://site.com/css/printer.css" rel="stylesheet" type="text/css" media="print" />
-
-nbs()
-=====
-
-.. php:function:: nbs($num = 1)
+.. function:: nbs([$num = 1])
 
 	:param	int	$num: Number of space entities to produce
 	:returns:	string
 
-Generates non-breaking spaces (&nbsp;) based on the number you submit.
-Example::
+	Generates non-breaking spaces (&nbsp;) based on the number you submit.
+	Example::
 
-	echo nbs(3);
+		echo nbs(3);
 
-The above would produce::
+	The above would produce:
 
-	&nbsp;&nbsp;&nbsp;
+	.. code-block:: html
 
-ul() and ol()
-=============
+		&nbsp;&nbsp;&nbsp;
 
-.. php:function:: ul($list, $attributes = '')
+
+.. function:: ul($list[, $attributes = ''])
 
 	:param	array	$list: List entries
 	:param	array	$attributes: HTML attributes
 	:returns:	string
 
-Permits you to generate ordered or unordered HTML lists from simple or
-multi-dimensional arrays. Example::
+	Permits you to generate ordered or unordered HTML lists from simple or
+	multi-dimensional arrays. Example::
 
-	$list = array(
-		'red',
-		'blue',
-		'green',
-		'yellow'
-	);
-
-	$attributes = array(
-		'class'	=> 'boldlist',
-		'id'	=> 'mylist'
-	);
-
-	echo ul($list, $attributes);
-
-The above code will produce this::
-
-	 <ul class="boldlist" id="mylist">
-		<li>red</li>
-		<li>blue</li>
-		<li>green</li>
-		<li>yellow</li>
-	</ul>
-
-Here is a more complex example, using a multi-dimensional array::
-
-	$attributes = array(
-		'class'	=> 'boldlist',
-		'id'	=> 'mylist'
-	);
-
-	$list = array(
-		'colors'  => array(
+		$list = array(
 			'red',
 			'blue',
-			'green'
-		),
-		'shapes'  => array(
-			'round',
-			'square',
-			'circles' => array(
-				'ellipse',
-				'oval',
-				'sphere'
+			'green',
+			'yellow'
+		);
+
+		$attributes = array(
+			'class'	=> 'boldlist',
+			'id'	=> 'mylist'
+		);
+
+		echo ul($list, $attributes);
+
+	The above code will produce this:
+
+	.. code-block:: html
+
+		<ul class="boldlist" id="mylist">
+			<li>red</li>
+			<li>blue</li>
+			<li>green</li>
+			<li>yellow</li>
+		</ul>
+
+	Here is a more complex example, using a multi-dimensional array::
+
+		$attributes = array(
+			'class'	=> 'boldlist',
+			'id'	=> 'mylist'
+		);
+
+		$list = array(
+			'colors'  => array(
+				'red',
+				'blue',
+				'green'
+			),
+			'shapes'  => array(
+				'round',
+				'square',
+				'circles' => array(
+					'ellipse',
+					'oval',
+					'sphere'
+				)
+			),
+			'moods'  => array(
+				'happy',
+				'upset' => array(
+					'defeated' => array(
+						'dejected',
+						'disheartened',
+						'depressed'
+					),
+					'annoyed',
+					'cross',
+					'angry'
+				)
 			)
-		),
-		'moods'  => array(
-			'happy',
-			'upset' => array(
-				'defeated' => array(
-					'dejected',
-					'disheartened',
-					'depressed'
-				),
-				'annoyed',
-				'cross',
-				'angry'
-			)
-		)
-	);
+		);
 
-	echo ul($list, $attributes);
+		echo ul($list, $attributes);
 
-The above code will produce this::
+	The above code will produce this:
 
-	<ul class="boldlist" id="mylist">
-		<li>colors
-			<ul>
-				<li>red</li>
-				<li>blue</li>
-				<li>green</li>
-			</ul>
-		</li>
-		<li>shapes
-			<ul>
-				<li>round</li>
-				<li>suare</li>
-				<li>circles
-					<ul>
-						<li>elipse</li>
-						<li>oval</li>
-						<li>sphere</li>
-					</ul>
-				</li>
-			</ul>
-		</li>
-		<li>moods
-			<ul>
-				<li>happy</li>
-				<li>upset
-					<ul>
-						<li>defeated
-							<ul>
-								<li>dejected</li>
-								<li>disheartened</li>
-								<li>depressed</li>
-							</ul>
-						</li>
-						<li>annoyed</li>
-						<li>cross</li>
-						<li>angry</li>
-					</ul>
-				</li>
-			</ul>
-		</li>
-	</ul>
+	.. code-block:: html
 
-.. php:function:: ol($list, $attributes = '')
+		<ul class="boldlist" id="mylist">
+			<li>colors
+				<ul>
+					<li>red</li>
+					<li>blue</li>
+					<li>green</li>
+				</ul>
+			</li>
+			<li>shapes
+				<ul>
+					<li>round</li>
+					<li>suare</li>
+					<li>circles
+						<ul>
+							<li>elipse</li>
+							<li>oval</li>
+							<li>sphere</li>
+						</ul>
+					</li>
+				</ul>
+			</li>
+			<li>moods
+				<ul>
+					<li>happy</li>
+					<li>upset
+						<ul>
+							<li>defeated
+								<ul>
+									<li>dejected</li>
+									<li>disheartened</li>
+									<li>depressed</li>
+								</ul>
+							</li>
+							<li>annoyed</li>
+							<li>cross</li>
+							<li>angry</li>
+						</ul>
+					</li>
+				</ul>
+			</li>
+		</ul>
+
+.. function:: ol($list, $attributes = '')
 
 	:param	array	$list: List entries
 	:param	array	$attributes: HTML attributes
 	:returns:	string
 
-Identical to :php:func:`ul()`, only it produces the <ol> tag for
-ordered lists instead of <ul>.
+	Identical to :func:`ul()`, only it produces the <ol> tag for
+	ordered lists instead of <ul>.
 
-meta()
-======
 
-.. php:function:: meta($name = '', $content = '', $type = 'name', $newline = "\n")
+.. function:: meta([$name = ''[, $content = ''[, $type = 'name'[, $newline = "\n"]]]])
 
 	:param	string	$name: Meta name
 	:param	string	$content: Meta content
@@ -300,109 +305,107 @@
 	:param	string	$newline: Newline character
 	:returns:	string
 
-Helps you generate meta tags. You can pass strings to the function, or
-simple arrays, or multidimensional ones.
+	Helps you generate meta tags. You can pass strings to the function, or
+	simple arrays, or multidimensional ones.
 
-Examples::
+	Examples::
 
-	echo meta('description', 'My Great site');
-	// Generates:  <meta name="description" content="My Great Site" />
+		echo meta('description', 'My Great site');
+		// Generates:  <meta name="description" content="My Great Site" />
 
-	echo meta('Content-type', 'text/html; charset=utf-8', 'equiv');
-	// Note the third parameter.  Can be "equiv" or "name"
-	// Generates:  <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+		echo meta('Content-type', 'text/html; charset=utf-8', 'equiv');
+		// Note the third parameter.  Can be "equiv" or "name"
+		// Generates:  <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
 
-	echo meta(array('name' => 'robots', 'content' => 'no-cache'));
-	// Generates:  <meta name="robots" content="no-cache" />
+		echo meta(array('name' => 'robots', 'content' => 'no-cache'));
+		// Generates:  <meta name="robots" content="no-cache" />
 
-	$meta = array(
-		array(
-			'name' => 'robots',
-			'content' => 'no-cache'
-		),
-		array(
-			'name' => 'description',
-			'content' => 'My Great Site'
-		),
-		array(
-			'name' => 'keywords',
-			'content' => 'love, passion, intrigue, deception'
-		),
-		array(
-			'name' => 'robots',
-			'content' => 'no-cache'
-		),
-		array(
-			'name' => 'Content-type',
-			'content' => 'text/html; charset=utf-8', 'type' => 'equiv'
-		)
-	);
+		$meta = array(
+			array(
+				'name' => 'robots',
+				'content' => 'no-cache'
+			),
+			array(
+				'name' => 'description',
+				'content' => 'My Great Site'
+			),
+			array(
+				'name' => 'keywords',
+				'content' => 'love, passion, intrigue, deception'
+			),
+			array(
+				'name' => 'robots',
+				'content' => 'no-cache'
+			),
+			array(
+				'name' => 'Content-type',
+				'content' => 'text/html; charset=utf-8', 'type' => 'equiv'
+			)
+		);
 
-	echo meta($meta);
-	// Generates:
-	// <meta name="robots" content="no-cache" />
-	// <meta name="description" content="My Great Site" />
-	// <meta name="keywords" content="love, passion, intrigue, deception" />
-	// <meta name="robots" content="no-cache" />
-	// <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
+		echo meta($meta);
+		// Generates:
+		// <meta name="robots" content="no-cache" />
+		// <meta name="description" content="My Great Site" />
+		// <meta name="keywords" content="love, passion, intrigue, deception" />
+		// <meta name="robots" content="no-cache" />
+		// <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
 
-doctype()
-=========
 
-.. php:function:: doctype($type = 'xhtml1-strict')
+.. function:: doctype([$type = 'xhtml1-strict'])
 
 	:param	string	$type: Doctype name
 
-Helps you generate document type declarations, or DTD's. XHTML 1.0
-Strict is used by default, but many doctypes are available.
+	Helps you generate document type declarations, or DTD's. XHTML 1.0
+	Strict is used by default, but many doctypes are available.
 
-Example::
+	Example::
 
-	echo doctype(); // <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+		echo doctype(); // <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
-	echo doctype('html4-trans'); // <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+		echo doctype('html4-trans'); // <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 
-The following is a list of doctype choices. These are configurable, and
-pulled from application/config/doctypes.php
+	The following is a list of doctype choices. These are configurable, and
+	pulled from application/config/doctypes.php
 
-+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-| Doctype                       | Option                       | Result                                                                                                                                           |
-+===============================+==============================+==================================================================================================================================================+
-| XHTML 1.1                     | doctype('xhtml11')           | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">                                                |
-+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-| XHTML 1.0 Strict              | doctype('xhtml1-strict')     | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">                                    |
-+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-| XHTML 1.0 Transitional        | doctype('xhtml1-trans')      | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">                        |
-+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-| XHTML 1.0 Frameset            | doctype('xhtml1-frame')      | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">                                |
-+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-| XHTML Basic 1.1               | doctype('xhtml-basic11')     | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">                                    |
-+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-| HTML 5                        | doctype('html5')             | <!DOCTYPE html>                                                                                                                                  |
-+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-| HTML 4 Strict                 | doctype('html4-strict')      | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">                                                       |
-+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-| HTML 4 Transitional           | doctype('html4-trans')       | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">                                           |
-+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-| HTML 4 Frameset               | doctype('html4-frame')       | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">                                            |
-+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-| MathML 1.01                   | doctype('mathml1')	       | <!DOCTYPE math SYSTEM "http://www.w3.org/Math/DTD/mathml1/mathml.dtd">                                                                           |
-+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-| MathML 2.0                    | doctype('mathml2')           | <!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">                                             |
-+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-| SVG 1.0                       | doctype('svg10')             | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">                                       |
-+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-| SVG 1.1 Full                  | doctype('svg11')             | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">                                               |
-+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-| SVG 1.1 Basic                 | doctype('svg11-basic')       | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Basic//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-basic.dtd">                                   |
-+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-| SVG 1.1 Tiny                  | doctype('svg11-tiny')        | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">                                     |
-+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-| XHTML+MathML+SVG (XHTML host) | doctype('xhtml-math-svg-xh') | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">    |
-+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-| XHTML+MathML+SVG (SVG host)   | doctype('xhtml-math-svg-sh') | <!DOCTYPE svg:svg PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd"> |
-+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-| XHTML+RDFa 1.0                | doctype('xhtml-rdfa-1')      | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">                                          |
-+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
-| XHTML+RDFa 1.1                | doctype('xhtml-rdfa-2')      | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">                                          |
-+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
\ No newline at end of file
+	+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+	| Doctype                       | Option                       | Result                                                                                                                                           |
+	+===============================+==============================+==================================================================================================================================================+
+	| XHTML 1.1                     | doctype('xhtml11')           | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">                                                |
+	+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+	| XHTML 1.0 Strict              | doctype('xhtml1-strict')     | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">                                    |
+	+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+	| XHTML 1.0 Transitional        | doctype('xhtml1-trans')      | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">                        |
+	+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+	| XHTML 1.0 Frameset            | doctype('xhtml1-frame')      | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">                                |
+	+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+	| XHTML Basic 1.1               | doctype('xhtml-basic11')     | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">                                    |
+	+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+	| HTML 5                        | doctype('html5')             | <!DOCTYPE html>                                                                                                                                  |
+	+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+	| HTML 4 Strict                 | doctype('html4-strict')      | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">                                                       |
+	+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+	| HTML 4 Transitional           | doctype('html4-trans')       | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">                                           |
+	+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+	| HTML 4 Frameset               | doctype('html4-frame')       | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">                                            |
+	+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+	| MathML 1.01                   | doctype('mathml1')	       | <!DOCTYPE math SYSTEM "http://www.w3.org/Math/DTD/mathml1/mathml.dtd">                                                                           |
+	+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+	| MathML 2.0                    | doctype('mathml2')           | <!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">                                             |
+	+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+	| SVG 1.0                       | doctype('svg10')             | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">                                       |
+	+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+	| SVG 1.1 Full                  | doctype('svg11')             | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">                                               |
+	+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+	| SVG 1.1 Basic                 | doctype('svg11-basic')       | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Basic//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-basic.dtd">                                   |
+	+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+	| SVG 1.1 Tiny                  | doctype('svg11-tiny')        | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">                                     |
+	+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+	| XHTML+MathML+SVG (XHTML host) | doctype('xhtml-math-svg-xh') | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">    |
+	+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+	| XHTML+MathML+SVG (SVG host)   | doctype('xhtml-math-svg-sh') | <!DOCTYPE svg:svg PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd"> |
+	+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+	| XHTML+RDFa 1.0                | doctype('xhtml-rdfa-1')      | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">                                          |
+	+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
+	| XHTML+RDFa 1.1                | doctype('xhtml-rdfa-2')      | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.1//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-2.dtd">                                          |
+	+-------------------------------+------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------+
\ No newline at end of file
diff --git a/user_guide_src/source/helpers/inflector_helper.rst b/user_guide_src/source/helpers/inflector_helper.rst
index 1f54b76..717ecc6 100644
--- a/user_guide_src/source/helpers/inflector_helper.rst
+++ b/user_guide_src/source/helpers/inflector_helper.rst
@@ -5,7 +5,12 @@
 The Inflector Helper file contains functions that permits you to change
 words to plural, singular, camel case, etc.
 
-.. contents:: Page Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 Loading this Helper
 ===================
@@ -14,86 +19,77 @@
 
 	$this->load->helper('inflector');
 
+Available Functions
+===================
+
 The following functions are available:
 
-singular()
-==========
 
-.. php:function:: singular($str)
+.. function:: singular($str)
 
 	:param	string	$str: Input string
 	:returns:	string
 
-Changes a plural word to singular. Example::
+	Changes a plural word to singular. Example::
 
-	echo singular('dogs'); // Prints 'dog'
+		echo singular('dogs'); // Prints 'dog'
 
-plural()
-========
 
-.. php:function:: plural($str)
+.. function:: plural($str)
 
 	:param	string	$str: Input string
 	:returns:	string
 
-Changes a singular word to plural. Example::
+	Changes a singular word to plural. Example::
 
-	echo plural('dog'); // Prints 'dogs'
+		echo plural('dog'); // Prints 'dogs'
 
-camelize()
-==========
 
-.. php:function:: camelize($str)
+.. function:: camelize($str)
 
 	:param	string	$str: Input string
 	:returns:	string
 
-Changes a string of words separated by spaces or underscores to camel
-case. Example::
+	Changes a string of words separated by spaces or underscores to camel
+	case. Example::
 
-	echo camelize('my_dog_spot'); // Prints 'myDogSpot'
+		echo camelize('my_dog_spot'); // Prints 'myDogSpot'
 
-underscore()
-============
 
-.. php:function:: camelize($str)
+.. function:: underscore($str)
 
 	:param	string	$str: Input string
 	:returns:	string
 
-Takes multiple words separated by spaces and underscores them.
-Example::
+	Takes multiple words separated by spaces and underscores them.
+	Example::
 
-	echo underscore('my dog spot'); // Prints 'my_dog_spot'
+		echo underscore('my dog spot'); // Prints 'my_dog_spot'
 
-humanize()
-==========
 
-.. php:function:: camelize($str)
+.. function:: humanize($str[, $separator = '_'])
 
 	:param	string	$str: Input string
 	:param	string	$separator: Input separator
 	:returns:	string
 
-Takes multiple words separated by underscores and adds spaces between
-them. Each word is capitalized.
+	Takes multiple words separated by underscores and adds spaces between
+	them. Each word is capitalized.
 
-Example::
+	Example::
 
-	echo humanize('my_dog_spot'); // Prints 'My Dog Spot'
+		echo humanize('my_dog_spot'); // Prints 'My Dog Spot'
 
-To use dashes instead of underscores::
+	To use dashes instead of underscores::
 
-	echo humanize('my-dog-spot', '-'); // Prints 'My Dog Spot'
+		echo humanize('my-dog-spot', '-'); // Prints 'My Dog Spot'
 
-is_countable()
-==============
 
-.. php:function:: is_countable($word)
+.. function:: is_countable($word)
 
 	:param	string	$word: Input string
 	:returns:	bool
 
-Checks if the given word has a plural version. Example::
+	Checks if the given word has a plural version. Example::
 
-	is_countable('equipment'); // Returns FALSE
\ No newline at end of file
+		is_countable('equipment'); // Returns FALSE
\ No newline at end of file
diff --git a/user_guide_src/source/helpers/language_helper.rst b/user_guide_src/source/helpers/language_helper.rst
index 1911e3b..9e5d9bd 100644
--- a/user_guide_src/source/helpers/language_helper.rst
+++ b/user_guide_src/source/helpers/language_helper.rst
@@ -5,7 +5,12 @@
 The Language Helper file contains functions that assist in working with
 language files.
 
-.. contents:: Page Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 Loading this Helper
 ===================
@@ -14,23 +19,24 @@
 
 	$this->load->helper('language');
 
+Available Functions
+===================
+
 The following functions are available:
 
-lang()
-======
 
-.. php:function:: lang($line, $for = '', $attributes = array())
+.. function:: lang($line[, $for = ''[, $attributes = array()]])
 
-	:param	string	$line: Language line key
-	:param	string	$for: HTML "for" attribute (ID of the element we're creating a label for)
-	:param	array	$attributes: Any additional HTML attributes
-	:returns:	string
+  :param	string	$line: Language line key
+  :param	string	$for: HTML "for" attribute (ID of the element we're creating a label for)
+  :param	array	$attributes: Any additional HTML attributes
+  :returns:	string
 
-This function returns a line of text from a loaded language file with
-simplified syntax that may be more desirable for view files than 
-``CI_Lang::line()``.
+  This function returns a line of text from a loaded language file with
+  simplified syntax that may be more desirable for view files than
+  ``CI_Lang::line()``.
 
-Example::
+  Example::
 
-	echo lang('language_key', 'form_item_id', array('class' => 'myClass');
-	// Outputs: <label for="form_item_id" class="myClass">Language line</label>
\ No newline at end of file
+  	echo lang('language_key', 'form_item_id', array('class' => 'myClass');
+  	// Outputs: <label for="form_item_id" class="myClass">Language line</label>
\ No newline at end of file
diff --git a/user_guide_src/source/helpers/number_helper.rst b/user_guide_src/source/helpers/number_helper.rst
index 8e0ebda..5a3d72b 100644
--- a/user_guide_src/source/helpers/number_helper.rst
+++ b/user_guide_src/source/helpers/number_helper.rst
@@ -5,7 +5,12 @@
 The Number Helper file contains functions that help you work with
 numeric data.
 
-.. contents:: Page Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 Loading this Helper
 ===================
@@ -14,32 +19,33 @@
 
 	$this->load->helper('number');
 
+Available Functions
+===================
+
 The following functions are available:
 
-byte_format()
-=============
 
-.. php:function:: byte_format($num, $precision = 1)
+.. function:: byte_format($num[, $precision = 1])
 
 	:param	mixed	$num: Number of bytes
 	:param	int	$precision: Floating point precision
 	:returns:	string
 
-Formats numbers as bytes, based on size, and adds the appropriate
-suffix. Examples::
-	
-	echo byte_format(456); // Returns 456 Bytes
-	echo byte_format(4567); // Returns 4.5 KB
-	echo byte_format(45678); // Returns 44.6 KB
-	echo byte_format(456789); // Returns 447.8 KB
-	echo byte_format(3456789); // Returns 3.3 MB
-	echo byte_format(12345678912345); // Returns 1.8 GB
-	echo byte_format(123456789123456789); // Returns 11,228.3 TB
+	Formats numbers as bytes, based on size, and adds the appropriate
+	suffix. Examples::
 
-An optional second parameter allows you to set the precision of the
-result::
+		echo byte_format(456); // Returns 456 Bytes
+		echo byte_format(4567); // Returns 4.5 KB
+		echo byte_format(45678); // Returns 44.6 KB
+		echo byte_format(456789); // Returns 447.8 KB
+		echo byte_format(3456789); // Returns 3.3 MB
+		echo byte_format(12345678912345); // Returns 1.8 GB
+		echo byte_format(123456789123456789); // Returns 11,228.3 TB
 
-	 echo byte_format(45678, 2); // Returns 44.61 KB
+	An optional second parameter allows you to set the precision of the
+	result::
 
-.. note:: The text generated by this function is found in the following
-	language file: `language/<your_lang>/number_lang.php`
\ No newline at end of file
+		 echo byte_format(45678, 2); // Returns 44.61 KB
+
+	.. note:: The text generated by this function is found in the following
+		language file: `language/<your_lang>/number_lang.php`
\ No newline at end of file
diff --git a/user_guide_src/source/helpers/path_helper.rst b/user_guide_src/source/helpers/path_helper.rst
index 3a271b2..61877d7 100644
--- a/user_guide_src/source/helpers/path_helper.rst
+++ b/user_guide_src/source/helpers/path_helper.rst
@@ -5,7 +5,12 @@
 The Path Helper file contains functions that permits you to work with
 file paths on the server.
 
-.. contents:: Page Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 Loading this Helper
 ===================
@@ -14,33 +19,34 @@
 
 	$this->load->helper('path');
 
+Available Functions
+===================
+
 The following functions are available:
 
-set_realpath()
-==============
 
-.. php:function:: set_realpath($path, $check_existance = FALSE)
+.. function:: set_realpath($path[, $check_existance = FALSE])
 
 	:param	string	$path: Path
 	:param	bool	$check_existance: Whether to check if the path actually exists
 	:returns:	string
 
-This function will return a server path without symbolic links or
-relative directory structures. An optional second argument will
-cause an error to be triggered if the path cannot be resolved.
+	This function will return a server path without symbolic links or
+	relative directory structures. An optional second argument will
+	cause an error to be triggered if the path cannot be resolved.
 
-Examples::
+	Examples::
 
-	$file = '/etc/php5/apache2/php.ini';
-	echo set_realpath($file); // Prints '/etc/php5/apache2/php.ini'
+		$file = '/etc/php5/apache2/php.ini';
+		echo set_realpath($file); // Prints '/etc/php5/apache2/php.ini'
 
-	$non_existent_file = '/path/to/non-exist-file.txt';
-	echo set_realpath($non_existent_file, TRUE);	// Shows an error, as the path cannot be resolved
-	echo set_realpath($non_existent_file, FALSE);	// Prints '/path/to/non-exist-file.txt'
+		$non_existent_file = '/path/to/non-exist-file.txt';
+		echo set_realpath($non_existent_file, TRUE);	// Shows an error, as the path cannot be resolved
+		echo set_realpath($non_existent_file, FALSE);	// Prints '/path/to/non-exist-file.txt'
 
-	$directory = '/etc/php5';
-	echo set_realpath($directory);	// Prints '/etc/php5/'
-	
-	$non_existent_directory = '/path/to/nowhere';
-	echo set_realpath($non_existent_directory, TRUE);	// Shows an error, as the path cannot be resolved
-	echo set_realpath($non_existent_directory, FALSE);	// Prints '/path/to/nowhere'
\ No newline at end of file
+		$directory = '/etc/php5';
+		echo set_realpath($directory);	// Prints '/etc/php5/'
+
+		$non_existent_directory = '/path/to/nowhere';
+		echo set_realpath($non_existent_directory, TRUE);	// Shows an error, as the path cannot be resolved
+		echo set_realpath($non_existent_directory, FALSE);	// Prints '/path/to/nowhere'
\ No newline at end of file
diff --git a/user_guide_src/source/helpers/security_helper.rst b/user_guide_src/source/helpers/security_helper.rst
index 21bf534..7df85d0 100644
--- a/user_guide_src/source/helpers/security_helper.rst
+++ b/user_guide_src/source/helpers/security_helper.rst
@@ -4,7 +4,12 @@
 
 The Security Helper file contains security related functions.
 
-.. contents:: Page Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 Loading this Helper
 ===================
@@ -13,92 +18,85 @@
 
 	$this->load->helper('security');
 
+Available Functions
+===================
+
 The following functions are available:
 
-xss_clean()
-===========
 
-.. php:function:: xss_clean($str, $is_image = FALSE)
+.. function:: xss_clean($str[, $is_image = FALSE])
 
 	:param	string	$str: Input data
 	:param	bool	$is_image: Whether we're dealing with an image
 	:returns:	string
 
-Provides Cross Site Script Hack filtering.
+	Provides Cross Site Script Hack filtering.
 
-This function is an alias for ``CI_Input::xss_clean()``. For more info,
-please see the :doc:`Input Library <../libraries/input>` documentation.
+	This function is an alias for ``CI_Input::xss_clean()``. For more info,
+	please see the :doc:`Input Library <../libraries/input>` documentation.
 
-sanitize_filename()
-===================
 
-.. php:function:: sanitize_filename($filename)
+.. function:: sanitize_filename($filename)
 
 	:param	string	$filename: Filename
 	:returns:	string
 
-Provides protection against directory traversal.
+	Provides protection against directory traversal.
 
-This function is an alias for ``CI_Security::sanitize_filename()``.
-For more info, please see the :doc:`Security Library <../libraries/security>`
-documentation.
+	This function is an alias for ``CI_Security::sanitize_filename()``.
+	For more info, please see the :doc:`Security Library <../libraries/security>`
+	documentation.
 
-do_hash()
-=========
 
-.. php:function:: do_hash($str, $type = 'sha1')
+.. function:: do_hash($str[, $type = 'sha1'])
 
 	:param	string	$str: Input
 	:param	string	$type: Algorithm
 	:returns:	string
 
-Permits you to create one way hashes suitable for encrypting
-passwords. Will use SHA1 by default.
+	Permits you to create one way hashes suitable for encrypting
+	passwords. Will use SHA1 by default.
 
-See `hash_algos() <http://php.net/function.hash_algos>`_
-for a full list of supported algorithms.
+	See `hash_algos() <http://php.net/function.hash_algos>`_
+	for a full list of supported algorithms.
 
-Examples::
+	Examples::
 
-	$str = do_hash($str); // SHA1
-	$str = do_hash($str, 'md5'); // MD5
+		$str = do_hash($str); // SHA1
+		$str = do_hash($str, 'md5'); // MD5
 
-.. note:: This function was formerly named ``dohash()``, which has been
-	removed in favor of ``do_hash()``.
+	.. note:: This function was formerly named ``dohash()``, which has been
+		removed in favor of ``do_hash()``.
 
-.. note:: This function is DEPRECATED. Use the native ``hash()`` instead.
+	.. note:: This function is DEPRECATED. Use the native ``hash()`` instead.
 
-strip_image_tags()
-==================
 
-.. php:function:: strip_image_tags($str)
+.. function:: strip_image_tags($str)
 
 	:param	string	$str: Input
 	:returns:	string
 
-This is a security function that will strip image tags from a string.
-It leaves the image URL as plain text.
+	This is a security function that will strip image tags from a string.
+	It leaves the image URL as plain text.
 
-Example::
+	Example::
 
-	$string = strip_image_tags($string);
+		$string = strip_image_tags($string);
 
-This function is an alias for ``CI_Security::strip_image_tags()``. For
-more info, please see the :doc:`Security Library <../libraries/security>`
-documentation.
+	This function is an alias for ``CI_Security::strip_image_tags()``. For
+	more info, please see the :doc:`Security Library <../libraries/security>`
+	documentation.
 
-encode_php_tags()
-=================
 
-.. php:function:: encode_php_tags($str)
+.. function:: encode_php_tags($str)
 
 	:param	string	$str: Input
 	:returns:	string
 
-This is a security function that converts PHP tags to entities.
+	This is a security function that converts PHP tags to entities.
 
-.. note: :php:func:`xss_clean()` does this automatically, if you use it.
+	.. note:: :func:`xss_clean()` does this automatically, if you use it.
 
-Example::
+	Example::
 
-	$string = encode_php_tags($string);
\ No newline at end of file
+		$string = encode_php_tags($string);
\ No newline at end of file
diff --git a/user_guide_src/source/helpers/smiley_helper.rst b/user_guide_src/source/helpers/smiley_helper.rst
index cfd52ff..077c56a 100644
--- a/user_guide_src/source/helpers/smiley_helper.rst
+++ b/user_guide_src/source/helpers/smiley_helper.rst
@@ -5,7 +5,12 @@
 The Smiley Helper file contains functions that let you manage smileys
 (emoticons).
 
-.. contents:: Page Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 Loading this Helper
 ===================
@@ -46,7 +51,7 @@
 In your **application/controllers/** directory, create a file called
 Smileys.php and place the code below in it.
 
-.. important:: Change the URL in the :php:func:`get_clickable_smileys()`
+.. important:: Change the URL in the :func:`get_clickable_smileys()`
 	function below so that it points to your smiley folder.
 
 You'll notice that in addition to the smiley helper, we are also using
@@ -100,65 +105,60 @@
 	$image_array = get_smiley_links("http://example.com/images/smileys/", "comment_textarea_alias");
 
 To map the alias to the field id, pass them both into the
-:php:func:`smiley_js()` function::
+:func:`smiley_js()` function::
 
 	$image_array = smiley_js("comment_textarea_alias", "comments");
 
-get_clickable_smileys()
-=======================
+Available Functions
+===================
 
-.. php:function:: get_clickable_smileys($image_url, $alias = '', $smileys = NULL)
+.. function:: get_clickable_smileys($image_url[, $alias = ''[, $smileys = NULL]])
 
 	:param	string	$image_url: URL path to the smileys directory
 	:param	string	$alias: Field alias
 	:returns:	array
 
-Returns an array containing your smiley images wrapped in a clickable
-link. You must supply the URL to your smiley folder and a field id or
-field alias.
+	Returns an array containing your smiley images wrapped in a clickable
+	link. You must supply the URL to your smiley folder and a field id or
+	field alias.
 
-Example::
+	Example::
 
-	$image_array = get_smiley_links("http://example.com/images/smileys/", "comment");
+		$image_array = get_smiley_links("http://example.com/images/smileys/", "comment");
 
-smiley_js()
-===========
 
-.. php:function:: smiley_js($alias = '', $field_id = '', $inline = TRUE)
+.. function:: smiley_js([$alias = ''[, $field_id = ''[, $inline = TRUE]]])
 
 	:param	string	$alias: Field alias
 	:param	string	$field_id: Field ID
 	:param	bool	$inline: Whether we're inserting an inline smiley
 
-Generates the JavaScript that allows the images to be clicked and
-inserted into a form field. If you supplied an alias instead of an id
-when generating your smiley links, you need to pass the alias and
-corresponding form id into the function. This function is designed to be
-placed into the <head> area of your web page.
+	Generates the JavaScript that allows the images to be clicked and
+	inserted into a form field. If you supplied an alias instead of an id
+	when generating your smiley links, you need to pass the alias and
+	corresponding form id into the function. This function is designed to be
+	placed into the <head> area of your web page.
 
-Example::
+	Example::
 
-	<?php echo smiley_js(); ?>
+		<?php echo smiley_js(); ?>
 
-parse_smileys()
-===============
 
-.. php:function:: parse_smileys($str = '', $image_url = '', $smileys = NULL)
+.. function:: parse_smileys([$str = ''[, $image_url = ''[, $smileys = NULL]]])
 
 	:param	string	$str: Text containing smiley codes
 	:param	string	$image_url: URL path to the smileys directory
 	:param	array	$smileys: An array of smileys
 	:returns:	string
 
-Takes a string of text as input and replaces any contained plain text
-smileys into the image equivalent. The first parameter must contain your
-string, the second must contain the URL to your smiley folder
+	Takes a string of text as input and replaces any contained plain text
+	smileys into the image equivalent. The first parameter must contain your
+	string, the second must contain the URL to your smiley folder
 
-Example::
+	Example::
 
-	$str = 'Here are some smileys: :-)  ;-)';
-	$str = parse_smileys($str, "http://example.com/images/smileys/");
-	echo $str;
-
+		$str = 'Here are some smileys: :-)  ;-)';
+		$str = parse_smileys($str, 'http://example.com/images/smileys/');
+		echo $str;
 
 .. |smile!| image:: ../images/smile.gif
\ No newline at end of file
diff --git a/user_guide_src/source/helpers/string_helper.rst b/user_guide_src/source/helpers/string_helper.rst
index d0d3024..1ca654e 100644
--- a/user_guide_src/source/helpers/string_helper.rst
+++ b/user_guide_src/source/helpers/string_helper.rst
@@ -5,7 +5,12 @@
 The String Helper file contains functions that assist in working with
 strings.
 
-.. contents:: Page Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 Loading this Helper
 ===================
@@ -14,214 +19,197 @@
 
 	$this->load->helper('string');
 
+Available Functions
+===================
+
 The following functions are available:
 
-random_string()
-===============
 
-.. php:function:: random_string($type = 'alnum', $len = 8)
+.. function:: random_string([$type = 'alnum'[, $len = 8]])
 
 	:param	string	$type: Randomization type
 	:param	int	$len: Output string length
 	:returns:	string
 
-Generates a random string based on the type and length you specify.
-Useful for creating passwords or generating random hashes.
+	Generates a random string based on the type and length you specify.
+	Useful for creating passwords or generating random hashes.
 
-The first parameter specifies the type of string, the second parameter
-specifies the length. The following choices are available:
+	The first parameter specifies the type of string, the second parameter
+	specifies the length. The following choices are available:
 
--  **alpha**: A string with lower and uppercase letters only.
--  **alnum**: Alpha-numeric string with lower and uppercase characters.
--  **basic**: A random number based on ``mt_rand()``.
--  **numeric**: Numeric string.
--  **nozero**: Numeric string with no zeros.
--  **md5**: An encrypted random number based on ``md5()`` (fixed length of 32).
--  **sha1**: An encrypted random number based on ``sha1()`` (fixed length of 40).
+	-  **alpha**: A string with lower and uppercase letters only.
+	-  **alnum**: Alpha-numeric string with lower and uppercase characters.
+	-  **basic**: A random number based on ``mt_rand()``.
+	-  **numeric**: Numeric string.
+	-  **nozero**: Numeric string with no zeros.
+	-  **md5**: An encrypted random number based on ``md5()`` (fixed length of 32).
+	-  **sha1**: An encrypted random number based on ``sha1()`` (fixed length of 40).
 
-Usage example::
+	Usage example::
 
-	echo random_string('alnum', 16);
+		echo random_string('alnum', 16);
 
-.. note:: Usage of the *unique* and *encrypt* types is DEPRECATED. They
-	are just aliases for *md5* and *sha1* respectively.
+	.. note:: Usage of the *unique* and *encrypt* types is DEPRECATED. They
+		are just aliases for *md5* and *sha1* respectively.
 
-increment_string()
-==================
 
-.. php:function:: increment_string($str, $separator = '_', $first = 1)
+.. function:: increment_string($str[, $separator = '_'[, $first = 1]])
 
 	:param	string	$str: Input string
 	:param	string	$separator: Separator to append a duplicate number with
 	:param	int	$first: Starting number
 	:returns:	string
 
-Increments a string by appending a number to it or increasing the
-number. Useful for creating "copies" or a file or duplicating database
-content which has unique titles or slugs.
+	Increments a string by appending a number to it or increasing the
+	number. Useful for creating "copies" or a file or duplicating database
+	content which has unique titles or slugs.
 
-Usage example::
+	Usage example::
 
-	echo increment_string('file', '_'); // "file_1"
-	echo increment_string('file', '-', 2); // "file-2"
-	echo increment_string('file_4'); // "file_5"
+		echo increment_string('file', '_'); // "file_1"
+		echo increment_string('file', '-', 2); // "file-2"
+		echo increment_string('file_4'); // "file_5"
 
-alternator()
-============
 
-.. php:function:: alternator($args)
+.. function:: alternator($args)
 
 	:param	mixed	$args: A variable number of arguments
 	:returns:	mixed
 
-Allows two or more items to be alternated between, when cycling through
-a loop. Example::
+	Allows two or more items to be alternated between, when cycling through
+	a loop. Example::
 
-	for ($i = 0; $i < 10; $i++)
-	{     
-		echo alternator('string one', 'string two');
-	}
+		for ($i = 0; $i < 10; $i++)
+		{     
+			echo alternator('string one', 'string two');
+		}
 
-You can add as many parameters as you want, and with each iteration of
-your loop the next item will be returned.
+	You can add as many parameters as you want, and with each iteration of
+	your loop the next item will be returned.
 
-::
+	::
 
-	for ($i = 0; $i < 10; $i++)
-	{     
-		echo alternator('one', 'two', 'three', 'four', 'five');
-	}
+		for ($i = 0; $i < 10; $i++)
+		{     
+			echo alternator('one', 'two', 'three', 'four', 'five');
+		}
 
-.. note:: To use multiple separate calls to this function simply call the
-	function with no arguments to re-initialize.
+	.. note:: To use multiple separate calls to this function simply call the
+		function with no arguments to re-initialize.
 
-repeater()
-==========
 
-.. php:function:: repeater($data, $num = 1)
+.. function:: repeater($data[, $num = 1])
 
 	:param	string	$data: Input
 	:param	int	$num: Number of times to repeat
 	:returns:	string
 
-Generates repeating copies of the data you submit. Example::
+	Generates repeating copies of the data you submit. Example::
 
-	$string = "\n";
-	echo repeater($string, 30);
+		$string = "\n";
+		echo repeater($string, 30);
 
-The above would generate 30 newlines.
+	The above would generate 30 newlines.
 
-.. note:: This function is DEPRECATED. Use the native ``str_repeat()``
-	instead.
+	.. note:: This function is DEPRECATED. Use the native ``str_repeat()``
+		instead.
 
-reduce_double_slashes()
-=======================
 
-.. php:function:: reduce_double_slashes($str)
+.. function:: reduce_double_slashes($str)
 
 	:param	string	$str: Input string
 	:returns:	string
 
-Converts double slashes in a string to a single slash, except those
-found in URL protocol prefixes (e.g. http://).
+	Converts double slashes in a string to a single slash, except those
+	found in URL protocol prefixes (e.g. http://).
 
-Example::
+	Example::
 
-	$string = "http://example.com//index.php";
-	echo reduce_double_slashes($string); // results in "http://example.com/index.php"
+		$string = "http://example.com//index.php";
+		echo reduce_double_slashes($string); // results in "http://example.com/index.php"
 
-strip_slashes()
-===============
 
-.. php:function:: strip_slashes($data)
+.. function:: strip_slashes($data)
 
 	:param	array	$data: Input
 	:returns:	array
 
 Removes any slashes from an array of strings.
 
-Example::
-	
-	$str = array(
-		'question'  => 'Is your name O\'reilly?',
-		'answer' => 'No, my name is O\'connor.'
-	);
-	
-	$str = strip_slashes($str);
-	
-The above will return the following array::
+	Example::
 
-	array(
-		'question'  => "Is your name O'reilly?",
-		'answer' => "No, my name is O'connor."
-	);
+		$str = array(
+			'question'  => 'Is your name O\'reilly?',
+			'answer' => 'No, my name is O\'connor.'
+		);
 
-.. note:: For historical reasons, this function will also accept
-	and handle string inputs. This however makes it just an
-	alias for ``stripslashes()``.
+		$str = strip_slashes($str);
 
-trim_slashes()
-==============
+	The above will return the following array::
 
-.. php:function:: trim_slashes($str)
+		array(
+			'question'  => "Is your name O'reilly?",
+			'answer' => "No, my name is O'connor."
+		);
+
+	.. note:: For historical reasons, this function will also accept
+		and handle string inputs. This however makes it just an
+		alias for ``stripslashes()``.
+
+
+.. function:: trim_slashes($str)
 
 	:param	string	$str: Input string
 	:returns:	string
 
-Removes any leading/trailing slashes from a string. Example::
+	Removes any leading/trailing slashes from a string. Example::
 
-	$string = "/this/that/theother/";
-	echo trim_slashes($string); // results in this/that/theother
+		$string = "/this/that/theother/";
+		echo trim_slashes($string); // results in this/that/theother
 
-.. note:: This function is DEPRECATED. Use the native ``trim()`` instead:
-	|
-	| trim($str, '/');
+	.. note:: This function is DEPRECATED. Use the native ``trim()`` instead:
+		|
+		| trim($str, '/');
 
-reduce_multiples()
-==================
 
-.. php:function:: reduce_multiples($str, $character = '', $trim = FALSE)
+.. function:: reduce_multiples($str[, $character = ''[, $trim = FALSE]])
 
 	:param	string	$str: Text to search in
 	:param	string	$character: Character to reduce
 	:param	bool	$trim: Whether to also trim the specified character
 	:returns:	string
 
-Reduces multiple instances of a particular character occuring directly
-after each other. Example::
+	Reduces multiple instances of a particular character occuring directly
+	after each other. Example::
 
-	$string = "Fred, Bill,, Joe, Jimmy";
-	$string = reduce_multiples($string,","); //results in "Fred, Bill, Joe, Jimmy"
+		$string = "Fred, Bill,, Joe, Jimmy";
+		$string = reduce_multiples($string,","); //results in "Fred, Bill, Joe, Jimmy"
 
-If the third parameter is set to TRUE it will remove occurences of the
-character at the beginning and the end of the string. Example::
+	If the third parameter is set to TRUE it will remove occurrences of the
+	character at the beginning and the end of the string. Example::
 
-	$string = ",Fred, Bill,, Joe, Jimmy,";
-	$string = reduce_multiples($string, ", ", TRUE); //results in "Fred, Bill, Joe, Jimmy"
+		$string = ",Fred, Bill,, Joe, Jimmy,";
+		$string = reduce_multiples($string, ", ", TRUE); //results in "Fred, Bill, Joe, Jimmy"
 
-quotes_to_entities()
-====================
 
-.. php:function:: quotes_to_entities($str)
+.. function:: quotes_to_entities($str)
 
 	:param	string	$str: Input string
 	:returns:	string
 
-Converts single and double quotes in a string to the corresponding HTML
-entities. Example::
+	Converts single and double quotes in a string to the corresponding HTML
+	entities. Example::
 
-	$string = "Joe's \"dinner\"";
-	$string = quotes_to_entities($string); //results in "Joe&#39;s &quot;dinner&quot;"
+		$string = "Joe's \"dinner\"";
+		$string = quotes_to_entities($string); //results in "Joe&#39;s &quot;dinner&quot;"
 
-strip_quotes()
-==============
 
-.. php:function:: strip_quotes($str)
+.. function:: strip_quotes($str)
 
 	:param	string	$str: Input string
 	:returns:	string
 
-Removes single and double quotes from a string. Example::
+	Removes single and double quotes from a string. Example::
 
-	$string = "Joe's \"dinner\"";
-	$string = strip_quotes($string); //results in "Joes dinner"
\ No newline at end of file
+		$string = "Joe's \"dinner\"";
+		$string = strip_quotes($string); //results in "Joes dinner"
\ No newline at end of file
diff --git a/user_guide_src/source/helpers/text_helper.rst b/user_guide_src/source/helpers/text_helper.rst
index aec36c9..3c6430f 100644
--- a/user_guide_src/source/helpers/text_helper.rst
+++ b/user_guide_src/source/helpers/text_helper.rst
@@ -5,7 +5,12 @@
 The Text Helper file contains functions that assist in working with
 text.
 
-.. contents:: Page Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 Loading this Helper
 ===================
@@ -14,145 +19,131 @@
 
 	$this->load->helper('text');
 
+Available Functions
+===================
+
 The following functions are available:
 
-word_limiter()
-==============
-
-.. php:function:: word_limiter($str, $limit = 100, $end_char = '&#8230;')
+.. function:: word_limiter($str[, $limit = 100[, $end_char = '&#8230;']])
 
 	:param	string	$str: Input string
 	:param	int	$limit: Limit
 	:param	string	$end_char: End character (usually an ellipsis)
 	:returns:	string
 
-Truncates a string to the number of *words* specified. Example::
+	Truncates a string to the number of *words* specified. Example::
 
-	$string = "Here is a nice text string consisting of eleven words.";
-	$string = word_limiter($string, 4);
-	// Returns:  Here is a nice…
+		$string = "Here is a nice text string consisting of eleven words.";
+		$string = word_limiter($string, 4);
+		// Returns:  Here is a nice
 
-The third parameter is an optional suffix added to the string. By
-default it adds an ellipsis.
+	The third parameter is an optional suffix added to the string. By
+	default it adds an ellipsis.
 
-character_limiter()
-===================
 
-.. php:function:: character_limiter($str, $n = 500, $end_char = '&#8230;')
+.. function:: character_limiter($str[, $n = 500[, $end_char = '&#8230;']])
 
 	:param	string	$str: Input string
 	:param	int	$n: Number of characters
 	:param	string	$end_char: End character (usually an ellipsis)
 	:returns:	string
 
-Truncates a string to the number of *characters* specified. It
-maintains the integrity of words so the character count may be slightly
-more or less then what you specify.
+	Truncates a string to the number of *characters* specified. It
+	maintains the integrity of words so the character count may be slightly
+	more or less then what you specify.
 
-Example::
+	Example::
 
-	$string = "Here is a nice text string consisting of eleven words.";
-	$string = character_limiter($string, 20);
-	// Returns:  Here is a nice text string…
+		$string = "Here is a nice text string consisting of eleven words.";
+		$string = character_limiter($string, 20);
+		// Returns:  Here is a nice text string
 
-The third parameter is an optional suffix added to the string, if
-undeclared this helper uses an ellipsis.
+	The third parameter is an optional suffix added to the string, if
+	undeclared this helper uses an ellipsis.
 
-.. note:: If you need to truncate to an exact number of characters please
-	see the :ref:`ellipsize()` function below.
+	.. note:: If you need to truncate to an exact number of characters please
+		see the :func:`ellipsize()` function below.
 
-ascii_to_entities()
-===================
 
-.. php:function:: ascii_to_entities($str)
+.. function:: ascii_to_entities($str)
 
 	:param	string	$str: Input string
 	:returns:	string
 
-Converts ASCII values to character entities, including high ASCII and MS
-Word characters that can cause problems when used in a web page, so that
-they can be shown consistently regardless of browser settings or stored
-reliably in a database. There is some dependence on your server's
-supported character sets, so it may not be 100% reliable in all cases,
-but for the most part it should correctly identify characters outside
-the normal range (like accented characters).
+	Converts ASCII values to character entities, including high ASCII and MS
+	Word characters that can cause problems when used in a web page, so that
+	they can be shown consistently regardless of browser settings or stored
+	reliably in a database. There is some dependence on your server's
+	supported character sets, so it may not be 100% reliable in all cases,
+	but for the most part it should correctly identify characters outside
+	the normal range (like accented characters).
 
-Example::
+	Example::
 
-	$string = ascii_to_entities($string);
+		$string = ascii_to_entities($string);
 
-entities_to_ascii()
-===================
 
-.. php:function::entities_to_ascii($str, $all = TRUE)
+.. function::entities_to_ascii($str[, $all = TRUE])
 
 	:param	string	$str: Input string
 	:param	bool	$all: Whether to convert unsafe entities as well
 	:returns:	string
 
-This function does the opposite of :php:func:`ascii_to_entities()`.
-It turns character entities back into ASCII.
+	This function does the opposite of :func:`ascii_to_entities()`.
+	It turns character entities back into ASCII.
 
-convert_accented_characters()
-=============================
 
-.. php:function:: convert_accented_characters($str)
+.. function:: convert_accented_characters($str)
 
 	:param	string	$str: Input string
 	:returns:	string
 
-Transliterates high ASCII characters to low ASCII equivalents. Useful
-when non-English characters need to be used where only standard ASCII
-characters are safely used, for instance, in URLs.
+	Transliterates high ASCII characters to low ASCII equivalents. Useful
+	when non-English characters need to be used where only standard ASCII
+	characters are safely used, for instance, in URLs.
 
-Example::
+	Example::
 
-	$string = convert_accented_characters($string);
+		$string = convert_accented_characters($string);
 
-.. note:: This function uses a companion config file
-	`application/config/foreign_chars.php` to define the to and
-	from array for transliteration.
+	.. note:: This function uses a companion config file
+		`application/config/foreign_chars.php` to define the to and
+		from array for transliteration.
 
-word_censor()
-=============
 
-.. php:function:: word_censor($str, $censored, $replacement = '')
+.. function:: word_censor($str, $censored[, $replacement = ''])
 
 	:param	string	$str: Input string
 	:param	array	$censored: List of bad words to censor
 	:param	string	$replacement: What to replace bad words with
 	:returns:	string
 
-Enables you to censor words within a text string. The first parameter
-will contain the original string. The second will contain an array of
-words which you disallow. The third (optional) parameter can contain
-a replacement value for the words. If not specified they are replaced
-with pound signs: ####.
+	Enables you to censor words within a text string. The first parameter
+	will contain the original string. The second will contain an array of
+	words which you disallow. The third (optional) parameter can contain
+	a replacement value for the words. If not specified they are replaced
+	with pound signs: ####.
 
-Example::
+	Example::
 
-	$disallowed = array('darn', 'shucks', 'golly', 'phooey');
-	$string = word_censor($string, $disallowed, 'Beep!');
+		$disallowed = array('darn', 'shucks', 'golly', 'phooey');
+		$string = word_censor($string, $disallowed, 'Beep!');
 
-highlight_code()
-================
 
-.. php:function:: highlight_code($str)
+.. function:: highlight_code($str)
 
 	:param	string	$str: Input string
 	:returns:	string
 
-Colorizes a string of code (PHP, HTML, etc.). Example::
+	Colorizes a string of code (PHP, HTML, etc.). Example::
 
-	$string = highlight_code($string);
+		$string = highlight_code($string);
 
-The function uses PHP's ``highlight_string()`` function, so the
-colors used are the ones specified in your php.ini file.
+	The function uses PHP's ``highlight_string()`` function, so the
+	colors used are the ones specified in your php.ini file.
 
-highlight_phrase()
-==================
 
-.. php:function:: highlight_phrase($str, $phrase, $tag_open = '<strong>', $tag_close = '</strong>')
+.. function:: highlight_phrase($str, $phrase[, $tag_open = '<mark>'[, $tag_close = '</mark>']])
 
 	:param	string	$str: Input string
 	:param	string	$phrase: Phrase to highlight
@@ -160,45 +151,49 @@
 	:param	string	$tag_close: Closing tag for the highlight
 	:returns:	string
 
-Will highlight a phrase within a text string. The first parameter will
-contain the original string, the second will contain the phrase you wish
-to highlight. The third and fourth parameters will contain the
-opening/closing HTML tags you would like the phrase wrapped in.
+	Will highlight a phrase within a text string. The first parameter will
+	contain the original string, the second will contain the phrase you wish
+	to highlight. The third and fourth parameters will contain the
+	opening/closing HTML tags you would like the phrase wrapped in.
 
-Example::
+	Example::
 
-	$string = "Here is a nice text string about nothing in particular.";
-	echo highlight_phrase($string, "nice text", '<span style="color:#990000;">', '</span>');
+		$string = "Here is a nice text string about nothing in particular.";
+		echo highlight_phrase($string, "nice text", '<span style="color:#990000;">', '</span>');
 
-The above code prints::
+	The above code prints::
 
-	Here is a <span style="color:#990000;">nice text</span> string about nothing in particular.
+		Here is a <span style="color:#990000;">nice text</span> string about nothing in particular.
 
-word_wrap()
-===========
+	.. note:: This function used to use the ``<strong>`` tag by default. Older browsers
+		might not support the new HTML5 mark tag, so it is recommended that you
+		insert the following CSS code into your stylesheet if you need to support
+		such browsers::
 
-.. php:function:: word_wrap($str, $charlim = 76)
+			mark {
+				background: #ff0;
+				color: #000;
+			};
+
+
+.. function:: word_wrap($str[, $charlim = 76])
 
 	:param	string	$str: Input string
 	:param	int	$charlim: Character limit
 	:returns:	string
 
-Wraps text at the specified *character* count while maintaining
-complete words.
+	Wraps text at the specified *character* count while maintaining
+	complete words.
 
-Example::
+	Example::
 
-	$string = "Here is a simple string of text that will help us demonstrate this function.";
-	echo word_wrap($string, 25);
+		$string = "Here is a simple string of text that will help us demonstrate this function.";
+		echo word_wrap($string, 25);
 
-	// Would produce:  Here is a simple string of text that will help us demonstrate this function
+		// Would produce:  Here is a simple string of text that will help us demonstrate this function
 
-.. _ellipsize():
 
-ellipsize()
-===========
-
-.. php:function:: ellipsize($str, $max_length, $position = 1, $ellipsis = '&hellip;')
+.. function:: ellipsize($str, $max_length[, $position = 1[, $ellipsis = '&hellip;']])
 
 	:param	string	$str: Input string
 	:param	int	$max_length: String length limit
@@ -207,23 +202,23 @@
 	:param	string	$ellipsis: What to use as the ellipsis character
 	:returns:	string
 
-This function will strip tags from a string, split it at a defined
-maximum length, and insert an ellipsis.
+	This function will strip tags from a string, split it at a defined
+	maximum length, and insert an ellipsis.
 
-The first parameter is the string to ellipsize, the second is the number
-of characters in the final string. The third parameter is where in the
-string the ellipsis should appear from 0 - 1, left to right. For
-example. a value of 1 will place the ellipsis at the right of the
-string, .5 in the middle, and 0 at the left.
+	The first parameter is the string to ellipsize, the second is the number
+	of characters in the final string. The third parameter is where in the
+	string the ellipsis should appear from 0 - 1, left to right. For
+	example. a value of 1 will place the ellipsis at the right of the
+	string, .5 in the middle, and 0 at the left.
 
-An optional forth parameter is the kind of ellipsis. By default,
-&hellip; will be inserted.
+	An optional forth parameter is the kind of ellipsis. By default,
+	&hellip; will be inserted.
 
-Example::
+	Example::
 
-	$str = 'this_string_is_entirely_too_long_and_might_break_my_design.jpg';
-	echo ellipsize($str, 32, .5);
+		$str = 'this_string_is_entirely_too_long_and_might_break_my_design.jpg';
+		echo ellipsize($str, 32, .5);
 
-Produces::
+	Produces::
 
-	this_string_is_e&hellip;ak_my_design.jpg
\ No newline at end of file
+		this_string_is_e&hellip;ak_my_design.jpg
\ No newline at end of file
diff --git a/user_guide_src/source/helpers/typography_helper.rst b/user_guide_src/source/helpers/typography_helper.rst
index 3c81687..d32befa 100644
--- a/user_guide_src/source/helpers/typography_helper.rst
+++ b/user_guide_src/source/helpers/typography_helper.rst
@@ -5,7 +5,12 @@
 The Typography Helper file contains functions that help your format text
 in semantically relevant ways.
 
-.. contents:: Page Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 Loading this Helper
 ===================
@@ -14,58 +19,55 @@
 
 	$this->load->helper('typography');
 
+Available Functions
+===================
+
 The following functions are available:
 
-auto_typography()
-=================
 
-.. php:function:: auto_typography($str, $reduce_linebreaks = FALSE)
+.. function:: auto_typography($str[, $reduce_linebreaks = FALSE])
 
 	:param	string	$str: Input string
 	:param	bool	$reduce_linebreaks: Whether to reduce multiple instances of double newlines to two
 	:returns:	string
 
-Formats text so that it is semantically and typographically correct
-HTML.
+	Formats text so that it is semantically and typographically correct
+	HTML.
 
-This function is an alias for ``CI_Typography::auto_typography``.
-For more info, please see the :doc:`Typography Library
-<../libraries/typography>` documentation.
+	This function is an alias for ``CI_Typography::auto_typography``.
+	For more info, please see the :doc:`Typography Library
+	<../libraries/typography>` documentation.
 
-Usage example::
+	Usage example::
 
-	$string = auto_typography($string);
+		$string = auto_typography($string);
 
-.. note:: Typographic formatting can be processor intensive, particularly if
-	you have a lot of content being formatted. If you choose to use this
-	function you may want to consider `caching <../general/caching>` your
-	pages.
+	.. note:: Typographic formatting can be processor intensive, particularly if
+		you have a lot of content being formatted. If you choose to use this
+		function you may want to consider `caching <../general/caching>` your
+		pages.
 
-nl2br_except_pre()
-==================
 
-.. php:function:: nl2br_except_pre($str)
+.. function:: nl2br_except_pre($str)
 
 	:param	string	$str: Input string
 	:returns:	string
 
-Converts newlines to <br /> tags unless they appear within <pre> tags.
-This function is identical to the native PHP ``nl2br()`` function,
-except that it ignores <pre> tags.
+	Converts newlines to <br /> tags unless they appear within <pre> tags.
+	This function is identical to the native PHP ``nl2br()`` function,
+	except that it ignores <pre> tags.
 
-Usage example::
+	Usage example::
 
-	$string = nl2br_except_pre($string);
+		$string = nl2br_except_pre($string);
 
-entity_decode()
-===============
 
-.. php:function:: entity_decode($str, $charset = NULL)
+.. function:: entity_decode($str, $charset = NULL)
 
 	:param	string	$str: Input string
 	:param	string	$charset: Character set
 	:returns:	string
 
-This function is an alias for ``CI_Security::entity_decode()``.
-Fore more info, please see the :doc:`Security Library
-<../libraries/security>` documentation.
\ No newline at end of file
+	This function is an alias for ``CI_Security::entity_decode()``.
+	Fore more info, please see the :doc:`Security Library
+	<../libraries/security>` documentation.
\ No newline at end of file
diff --git a/user_guide_src/source/helpers/url_helper.rst b/user_guide_src/source/helpers/url_helper.rst
index 7a49f18..24c7e25 100644
--- a/user_guide_src/source/helpers/url_helper.rst
+++ b/user_guide_src/source/helpers/url_helper.rst
@@ -4,7 +4,12 @@
 
 The URL Helper file contains functions that assist in working with URLs.
 
-.. contents:: Page Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 Loading this Helper
 ===================
@@ -15,371 +20,348 @@
 
 The following functions are available:
 
-site_url()
-==========
+Available Functions
+===================
 
-.. php:function:: site_url($uri = '', $protocol = NULL)
+.. function:: site_url([$uri = ''[, $protocol = NULL]])
 
 	:param	string	$uri: URI string
 	:param	string	$protocol: Protocol, e.g. 'http' or 'https'
 	:returns:	string
 
-Returns your site URL, as specified in your config file. The index.php
-file (or whatever you have set as your site **index_page** in your config
-file) will be added to the URL, as will any URI segments you pass to the
-function, plus the **url_suffix** as set in your config file.
+	Returns your site URL, as specified in your config file. The index.php
+	file (or whatever you have set as your site **index_page** in your config
+	file) will be added to the URL, as will any URI segments you pass to the
+	function, plus the **url_suffix** as set in your config file.
 
-You are encouraged to use this function any time you need to generate a
-local URL so that your pages become more portable in the event your URL
-changes.
+	You are encouraged to use this function any time you need to generate a
+	local URL so that your pages become more portable in the event your URL
+	changes.
 
-Segments can be optionally passed to the function as a string or an
-array. Here is a string example::
+	Segments can be optionally passed to the function as a string or an
+	array. Here is a string example::
 
-	echo site_url('news/local/123');
+		echo site_url('news/local/123');
 
-The above example would return something like:
-*http://example.com/index.php/news/local/123*
+	The above example would return something like:
+	*http://example.com/index.php/news/local/123*
 
-Here is an example of segments passed as an array::
+	Here is an example of segments passed as an array::
 
-	$segments = array('news', 'local', '123');
-	echo site_url($segments);
+		$segments = array('news', 'local', '123');
+		echo site_url($segments);
 
-This function is an alias for ``CI_Config::site_url()``. For more info,
-please see the :doc:`Config Library <../libraries/config>` documentation.
+	This function is an alias for ``CI_Config::site_url()``. For more info,
+	please see the :doc:`Config Library <../libraries/config>` documentation.
 
-base_url()
-===========
 
-.. php:function:: base_url($uri = '', $protocol = NULL)
+
+.. function:: base_url($uri = '', $protocol = NULL)
 
 	:param	string	$uri: URI string
 	:param	string	$protocol: Protocol, e.g. 'http' or 'https'
 	:returns:	string
 
-Returns your site base URL, as specified in your config file. Example::
+	Returns your site base URL, as specified in your config file. Example::
 
-	echo base_url();
+		echo base_url();
 
-This function returns the same thing as :php:func:`site_url()`, without
-the *index_page* or *url_suffix* being appended.
+	This function returns the same thing as :func:`site_url()`, without
+	the *index_page* or *url_suffix* being appended.
 
-Also like :php:func:`site_url()`, you can supply segments as a string or
-an array. Here is a string example::
+	Also like :func:`site_url()`, you can supply segments as a string or
+	an array. Here is a string example::
 
-	echo base_url("blog/post/123");
+		echo base_url("blog/post/123");
 
-The above example would return something like:
-*http://example.com/blog/post/123*
+	The above example would return something like:
+	*http://example.com/blog/post/123*
 
-This is useful because unlike :php:func:`site_url()`, you can supply a
-string to a file, such as an image or stylesheet. For example::
+	This is useful because unlike :func:`site_url()`, you can supply a
+	string to a file, such as an image or stylesheet. For example::
 
-	echo base_url("images/icons/edit.png");
+		echo base_url("images/icons/edit.png");
 
-This would give you something like:
-*http://example.com/images/icons/edit.png*
+	This would give you something like:
+	*http://example.com/images/icons/edit.png*
 
-This function is an alias for ``CI_Config::base_url()``. For more info,
-please see the :doc:`Config Library <../libraries/config>` documentation.
+	This function is an alias for ``CI_Config::base_url()``. For more info,
+	please see the :doc:`Config Library <../libraries/config>` documentation.
 
-current_url()
-=============
 
-.. php:function:: current_url()
+.. function:: current_url()
 
 	:returns:	string
 
-Returns the full URL (including segments) of the page being currently
-viewed.
+	Returns the full URL (including segments) of the page being currently
+	viewed.
 
-.. note:: Calling this function is the same as doing this:
-	|
-	| site_url(uri_string());
+	.. note:: Calling this function is the same as doing this:
+		|
+		| site_url(uri_string());
 
-uri_string()
-============
 
-.. php:function:: uri_string()
+.. function:: uri_string()
 
 	:returns:	string
 
-Returns the URI segments of any page that contains this function.
-For example, if your URL was this::
+	Returns the URI segments of any page that contains this function.
+	For example, if your URL was this::
 
-	http://some-site.com/blog/comments/123
+		http://some-site.com/blog/comments/123
 
-The function would return::
+	The function would return::
 
-	blog/comments/123
+		blog/comments/123
 
-This function is an alias for ``CI_Config::uri_string()``. For more info,
-please see the :doc:`Config Library <../libraries/config>` documentation.
+	This function is an alias for ``CI_Config::uri_string()``. For more info,
+	please see the :doc:`Config Library <../libraries/config>` documentation.
 
-index_page()
-============
 
-.. php:function:: index_page()
+.. function:: index_page()
 
 	:returns:	string
 
-Returns your site **index_page**, as specified in your config file.
-Example::
+	Returns your site **index_page**, as specified in your config file.
+	Example::
 
-	echo index_page();
+		echo index_page();
 
-anchor()
-========
 
-.. php:function:: anchor($uri = '', $title = '', $attributes = '')
+.. function:: anchor($uri = '', $title = '', $attributes = '')
 
 	:param	string	$uri: URI string
 	:param	string	$title: Anchor title
 	:param	mixed	$attributes: HTML attributes
 	:returns:	string
 
-Creates a standard HTML anchor link based on your local site URL.
+	Creates a standard HTML anchor link based on your local site URL.
 
-The first parameter can contain any segments you wish appended to the
-URL. As with the :php:func:`site_url()` function above, segments can
-be a string or an array.
+	The first parameter can contain any segments you wish appended to the
+	URL. As with the :func:`site_url()` function above, segments can
+	be a string or an array.
 
-.. note:: If you are building links that are internal to your application
-	do not include the base URL (http://...). This will be added
-	automatically from the information specified in your config file.
-	Include only the URI segments you wish appended to the URL.
+	.. note:: If you are building links that are internal to your application
+		do not include the base URL (http://...). This will be added
+		automatically from the information specified in your config file.
+		Include only the URI segments you wish appended to the URL.
 
-The second segment is the text you would like the link to say. If you
-leave it blank, the URL will be used.
+	The second segment is the text you would like the link to say. If you
+	leave it blank, the URL will be used.
 
-The third parameter can contain a list of attributes you would like
-added to the link. The attributes can be a simple string or an
-associative array.
+	The third parameter can contain a list of attributes you would like
+	added to the link. The attributes can be a simple string or an
+	associative array.
 
-Here are some examples::
+	Here are some examples::
 
-	echo anchor('news/local/123', 'My News', 'title="News title"');
-	// Prints: <a href="http://example.com/index.php/news/local/123" title="News title">My News</a>
+		echo anchor('news/local/123', 'My News', 'title="News title"');
+		// Prints: <a href="http://example.com/index.php/news/local/123" title="News title">My News</a>
 
-	echo anchor('news/local/123', 'My News', array('title' => 'The best news!'));
-	// Prints: <a href="http://example.com/index.php/news/local/123" title="The best news!">My News</a>
+		echo anchor('news/local/123', 'My News', array('title' => 'The best news!'));
+		// Prints: <a href="http://example.com/index.php/news/local/123" title="The best news!">My News</a>
 
-	echo anchor('', 'Click here');
-	// Prints: <a href="http://example.com">Click Here</a>
+		echo anchor('', 'Click here');
+		// Prints: <a href="http://example.com">Click Here</a>
 
-anchor_popup()
-==============
 
-.. php:function:: anchor_popup($uri = '', $title = '', $attributes = FALSE)
+.. function:: anchor_popup($uri = '', $title = '', $attributes = FALSE)
 
 	:param	string	$uri: URI string
 	:param	string	$title: Anchor title
 	:param	mixed	$attributes: HTML attributes
 	:returns:	string
 
-Nearly identical to the :php:func:``anchor()`` function except that it
-opens the URL in a new window. You can specify JavaScript window
-attributes in the third parameter to control how the window is opened.
-If the third parameter is not set it will simply open a new window with
-your own browser settings.
+	Nearly identical to the :func:`anchor()` function except that it
+	opens the URL in a new window. You can specify JavaScript window
+	attributes in the third parameter to control how the window is opened.
+	If the third parameter is not set it will simply open a new window with
+	your own browser settings.
 
-Here is an example with attributes::
+	Here is an example with attributes::
 
-	$atts = array(
-		'width'       => 800,
-		'height'      => 600,
-		'scrollbars'  => 'yes',
-		'status'      => 'yes',
-		'resizable'   => 'yes',
-		'screenx'     => 0,
-		'screeny'     => 0,
-		'window_name' => '_blank'
-	);
+		$atts = array(
+			'width'       => 800,
+			'height'      => 600,
+			'scrollbars'  => 'yes',
+			'status'      => 'yes',
+			'resizable'   => 'yes',
+			'screenx'     => 0,
+			'screeny'     => 0,
+			'window_name' => '_blank'
+		);
 
-	echo anchor_popup('news/local/123', 'Click Me!', $atts);
+		echo anchor_popup('news/local/123', 'Click Me!', $atts);
 
-.. note:: The above attributes are the function defaults so you only need to
-	set the ones that are different from what you need. If you want the
-	function to use all of its defaults simply pass an empty array in the
-	third parameter:
-	|
-	| echo anchor_popup('news/local/123', 'Click Me!', array());
+	.. note:: The above attributes are the function defaults so you only need to
+		set the ones that are different from what you need. If you want the
+		function to use all of its defaults simply pass an empty array in the
+		third parameter:
+		|
+		| echo anchor_popup('news/local/123', 'Click Me!', array());
 
-.. note:: The **window_name** is not really an attribute, but an argument to
-	the JavaScript `window.open() <http://www.w3schools.com/jsref/met_win_open.asp>`
-	method, which accepts either a window name or a window target.
+	.. note:: The **window_name** is not really an attribute, but an argument to
+		the JavaScript `window.open() <http://www.w3schools.com/jsref/met_win_open.asp>`
+		method, which accepts either a window name or a window target.
 
-.. note:: Any other attribute than the listed above will be parsed as an
-	HTML attribute to the anchor tag.
+	.. note:: Any other attribute than the listed above will be parsed as an
+		HTML attribute to the anchor tag.
 
-mailto()
-========
 
-.. php:function:: mailto($email, $title = '', $attributes = '')
+.. function:: mailto($email, $title = '', $attributes = '')
 
 	:param	string	$email: E-mail address
 	:param	string	$title: Anchor title
 	:param	mixed	$attributes: HTML attributes
 	:returns:	string
 
-Creates a standard HTML e-mail link. Usage example::
+	Creates a standard HTML e-mail link. Usage example::
 
-	echo mailto('me@my-site.com', 'Click Here to Contact Me');
+		echo mailto('me@my-site.com', 'Click Here to Contact Me');
 
-As with the :php:func:`anchor()` tab above, you can set attributes using the
-third parameter::
+	As with the :func:`anchor()` tab above, you can set attributes using the
+	third parameter::
 
-	$attributes = array('title' => 'Mail me');
-	echo mailto('me@my-site.com', 'Contact Me', $attributes);
+		$attributes = array('title' => 'Mail me');
+		echo mailto('me@my-site.com', 'Contact Me', $attributes);
 
-safe_mailto()
-=============
 
-.. php:function:: safe_mailto($email, $title = '', $attributes = '')
+.. function:: safe_mailto($email, $title = '', $attributes = '')
 
 	:param	string	$email: E-mail address
 	:param	string	$title: Anchor title
 	:param	mixed	$attributes: HTML attributes
 	:returns:	string
 
-Identical to the :php:func:`mailto()` function except it writes an obfuscated
-version of the *mailto* tag using ordinal numbers written with JavaScript to
-help prevent the e-mail address from being harvested by spam bots.
+	Identical to the :func:`mailto()` function except it writes an obfuscated
+	version of the *mailto* tag using ordinal numbers written with JavaScript to
+	help prevent the e-mail address from being harvested by spam bots.
 
-auto_link()
-===========
 
-.. php:function:: auto_link($str, $type = 'both', $popup = FALSE)
+.. function:: auto_link($str, $type = 'both', $popup = FALSE)
 
 	:param	string	$str: Input string
 	:param	string	$type: Link type ('email', 'url' or 'both')
 	:param	bool	$popup: Whether to create popup links
 	:returns:	string
 
-Automatically turns URLs and e-mail addresses contained in a string into
-links. Example::
+	Automatically turns URLs and e-mail addresses contained in a string into
+	links. Example::
 
-	$string = auto_link($string);
+		$string = auto_link($string);
 
-The second parameter determines whether URLs and e-mails are converted or
-just one or the other. Default behavior is both if the parameter is not
-specified. E-mail links are encoded as :php:func:`safe_mailto()` as shown
-above.
+	The second parameter determines whether URLs and e-mails are converted or
+	just one or the other. Default behavior is both if the parameter is not
+	specified. E-mail links are encoded as :func:`safe_mailto()` as shown
+	above.
 
-Converts only URLs::
+	Converts only URLs::
 
-	$string = auto_link($string, 'url');
+		$string = auto_link($string, 'url');
 
-Converts only e-mail addresses::
+	Converts only e-mail addresses::
 
-	$string = auto_link($string, 'email');
+		$string = auto_link($string, 'email');
 
-The third parameter determines whether links are shown in a new window.
-The value can be TRUE or FALSE (boolean)::
+	The third parameter determines whether links are shown in a new window.
+	The value can be TRUE or FALSE (boolean)::
 
-	$string = auto_link($string, 'both', TRUE);
+		$string = auto_link($string, 'both', TRUE);
 
-url_title()
-===========
 
-.. php:function:: url_title($str, $separator = '-', $lowercase = FALSE)
+.. function:: url_title($str, $separator = '-', $lowercase = FALSE)
 
 	:param	string	$str: Input string
 	:param	string	$separator: Word separator
 	:param	string	$lowercase: Whether to transform the output string to lower-case
 	:returns:	string
 
-Takes a string as input and creates a human-friendly URL string. This is
-useful if, for example, you have a blog in which you'd like to use the
-title of your entries in the URL. Example::
+	Takes a string as input and creates a human-friendly URL string. This is
+	useful if, for example, you have a blog in which you'd like to use the
+	title of your entries in the URL. Example::
 
-	$title = "What's wrong with CSS?";
-	$url_title = url_title($title);
-	// Produces: Whats-wrong-with-CSS
+		$title = "What's wrong with CSS?";
+		$url_title = url_title($title);
+		// Produces: Whats-wrong-with-CSS
 
-The second parameter determines the word delimiter. By default dashes
-are used. Preferred options are: **-** (dash) or **_** (underscore)
+	The second parameter determines the word delimiter. By default dashes
+	are used. Preferred options are: **-** (dash) or **_** (underscore)
 
-Example::
+	Example::
 
-	$title = "What's wrong with CSS?";
-	$url_title = url_title($title, 'underscore');
-	// Produces: Whats_wrong_with_CSS
+		$title = "What's wrong with CSS?";
+		$url_title = url_title($title, 'underscore');
+		// Produces: Whats_wrong_with_CSS
 
-.. note:: Old usage of 'dash' and 'underscore' as the second parameter
-	is DEPRECATED.
+	.. note:: Old usage of 'dash' and 'underscore' as the second parameter
+		is DEPRECATED.
 
-The third parameter determines whether or not lowercase characters are
-forced. By default they are not. Options are boolean TRUE/FALSE.
+	The third parameter determines whether or not lowercase characters are
+	forced. By default they are not. Options are boolean TRUE/FALSE.
 
-Example::
+	Example::
 
-	$title = "What's wrong with CSS?";
-	$url_title = url_title($title, 'underscore', TRUE);
-	// Produces: whats_wrong_with_css
+		$title = "What's wrong with CSS?";
+		$url_title = url_title($title, 'underscore', TRUE);
+		// Produces: whats_wrong_with_css
 
-prep_url()
-----------
 
-.. php:function:: prep_url($str = '')
+.. function:: prep_url($str = '')
 
 	:param	string	$str: URL string
 	:returns:	string
 
-This function will add http:// in the event that a protocol prefix
-is missing from a URL.
+	This function will add http:// in the event that a protocol prefix
+	is missing from a URL.
 
-Pass the URL string to the function like this::
+	Pass the URL string to the function like this::
 
-	$url = prep_url('example.com');
+		$url = prep_url('example.com');
 
-redirect()
-==========
 
-.. php:function:: redirect($uri = '', $method = 'auto', $code = NULL)
+.. function:: redirect($uri = '', $method = 'auto', $code = NULL)
 
 	:param	string	$uri: URI string
 	:param	string	$method: Redirect method ('auto', 'location' or 'refresh')
 	:param	string	$code: HTTP Response code (usually 302 or 303)
 	:returns:	void
 
-Does a "header redirect" to the URI specified. If you specify the full
-site URL that link will be built, but for local links simply providing
-the URI segments to the controller you want to direct to will create the
-link. The function will build the URL based on your config file values.
+	Does a "header redirect" to the URI specified. If you specify the full
+	site URL that link will be built, but for local links simply providing
+	the URI segments to the controller you want to direct to will create the
+	link. The function will build the URL based on your config file values.
 
-The optional second parameter allows you to force a particular redirection
-method. The available methods are **auto**, **location** and **refresh**,
-with location being faster but less reliable on IIS servers.
-The default is **auto**, which will attempt to intelligently choose the
-method based on the server environment.
+	The optional second parameter allows you to force a particular redirection
+	method. The available methods are **auto**, **location** and **refresh**,
+	with location being faster but less reliable on IIS servers.
+	The default is **auto**, which will attempt to intelligently choose the
+	method based on the server environment.
 
-The optional third parameter allows you to send a specific HTTP Response
-Code - this could be used for example to create 301 redirects for search
-engine purposes. The default Response Code is 302. The third parameter is
-*only* available with **location** redirects, and not *refresh*. Examples::
+	The optional third parameter allows you to send a specific HTTP Response
+	Code - this could be used for example to create 301 redirects for search
+	engine purposes. The default Response Code is 302. The third parameter is
+	*only* available with **location** redirects, and not *refresh*. Examples::
 
-	if ($logged_in == FALSE)
-	{      
-		redirect('/login/form/');
-	}
+		if ($logged_in == FALSE)
+		{      
+			redirect('/login/form/');
+		}
 
-	// with 301 redirect
-	redirect('/article/13', 'location', 301);
+		// with 301 redirect
+		redirect('/article/13', 'location', 301);
 
-.. note:: In order for this function to work it must be used before anything
-	is outputted to the browser since it utilizes server headers.
+	.. note:: In order for this function to work it must be used before anything
+		is outputted to the browser since it utilizes server headers.
 
-.. note:: For very fine grained control over headers, you should use the
-	`Output Library </libraries/output>` ``set_header()`` method.
+	.. note:: For very fine grained control over headers, you should use the
+		`Output Library </libraries/output>` ``set_header()`` method.
 
-.. note:: To IIS users: if you hide the `Server` HTTP header, the *auto*
-	method won't detect IIS, in that case it is advised you explicitly
-	use the **refresh** method.
+	.. note:: To IIS users: if you hide the `Server` HTTP header, the *auto*
+		method won't detect IIS, in that case it is advised you explicitly
+		use the **refresh** method.
 
-.. note:: When the **location** method is used, an HTTP status code of 303
-	will *automatically* be selected when the page is currently accessed
-	via POST and HTTP/1.1 is used.
+	.. note:: When the **location** method is used, an HTTP status code of 303
+		will *automatically* be selected when the page is currently accessed
+		via POST and HTTP/1.1 is used.
 
-.. important:: This function will terminate script execution.
\ No newline at end of file
+	.. important:: This function will terminate script execution.
\ No newline at end of file
diff --git a/user_guide_src/source/helpers/xml_helper.rst b/user_guide_src/source/helpers/xml_helper.rst
index be848bc..6d26c58 100644
--- a/user_guide_src/source/helpers/xml_helper.rst
+++ b/user_guide_src/source/helpers/xml_helper.rst
@@ -5,7 +5,12 @@
 The XML Helper file contains functions that assist in working with XML
 data.
 
-.. contents:: Page Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 Loading this Helper
 ===================
@@ -16,23 +21,34 @@
 
 	$this->load->helper('xml');
 
+Available Functions
+===================
+
 The following functions are available:
 
-xml_convert()
-=====================
+.. function:: xml_convert($str[, $protect_all = FALSE])
 
-Takes a string as input and converts the following reserved XML
-characters to entities:
+  :param string $str: the text string to convert
+  :param bool $protect_all: Whether to protect all content that looks like a potential entity instead of just numbered entities, e.g. &foo;
+  :returns: string
 
-- Ampersands: &
-- Less then and greater than characters: < >
-- Single and double quotes: ' "
-- Dashes: -
+  Takes a string as input and converts the following reserved XML
+  characters to entities:
 
-This function ignores ampersands if they are part of existing character
-entities. Example
+  - Ampersands: &
+  - Less then and greater than characters: < >
+  - Single and double quotes: ' "
+  - Dashes: -
 
-::
+  This function ignores ampersands if they are part of existing numbered
+  character entities, e.g. &#123;. Example::
 
-	$string = xml_convert($string);
+    $string = '<p>Here is a paragraph & an entity (&#123;).</p>';
+    $string = xml_convert($string);
+    echo $string;
 
+  outputs:
+
+  .. code-block:: html
+
+    &lt;p&gt;Here is a paragraph &amp; an entity (&#123;).&lt;/p&gt;
diff --git a/user_guide_src/source/installation/upgrade_300.rst b/user_guide_src/source/installation/upgrade_300.rst
index ca7569b..c11db34 100644
--- a/user_guide_src/source/installation/upgrade_300.rst
+++ b/user_guide_src/source/installation/upgrade_300.rst
@@ -375,7 +375,7 @@
 String helper repeater()
 ========================
 
-:doc:`String Helper <../helpers/string_helper>` function :php:func:`repeater()` is now just an alias for
+:doc:`String Helper <../helpers/string_helper>` function :func:`repeater()` is now just an alias for
 PHP's native ``str_repeat()`` function. It is deprecated and scheduled for removal in CodeIgniter 3.1+.
 
 .. note:: This function is still available, but you're strongly encouraged to remove its usage sooner
@@ -384,7 +384,7 @@
 String helper trim_slashes()
 ============================
 
-:doc:`String Helper <../helpers/string_helper>` function :php:func:`trim_slashes()` is now just an alias
+:doc:`String Helper <../helpers/string_helper>` function :func:`trim_slashes()` is now just an alias
 for PHP's native ``trim()`` function (with a slash passed as its second argument). It is deprecated and
 scheduled for removal in CodeIgniter 3.1+.
 
@@ -396,8 +396,8 @@
 
 :doc:`Email Helper <../helpers/email_helper>` only has two functions
 
- - :php:func:`valid_email()`
- - :php:func:`send_email()`
+ - :func:`valid_email()`
+ - :func:`send_email()`
 
 Both of them are now aliases for PHP's native ``filter_var()`` and ``mail()`` functions, respectively.
 Therefore the :doc:`Email Helper <../helpers/email_helper>` altogether is being deprecated and
@@ -447,7 +447,7 @@
 String helper random_string() types 'unique' and 'encrypt'
 ==========================================================
 
-When using the :doc:`String Helper <../helpers/string_helper>` function :php:func:`random_string()`,
+When using the :doc:`String Helper <../helpers/string_helper>` function :func:`random_string()`,
 you should no longer pass the **unique** and **encrypt** randomization types. They are only
 aliases for **md5** and **sha1** respectively and are now deprecated and scheduled for removal
 in CodeIgniter 3.1+.
@@ -458,7 +458,7 @@
 URL helper url_title() separators 'dash' and 'underscore'
 =========================================================
 
-When using the :doc:`URL Helper <../helpers/url_helper>` function :php:func:`url_title()`, you
+When using the :doc:`URL Helper <../helpers/url_helper>` function :func:`url_title()`, you
 should no longer pass **dash** or **underscore** as the word separator. This function will
 now accept any character and you should just pass the chosen character directly, so you
 should write '-' instead of 'dash' and '_' instead of 'underscore'.
@@ -557,4 +557,4 @@
 	mark {
 		background: #ff0;
 		color: #000;
-	};
\ No newline at end of file
+	};
diff --git a/user_guide_src/source/libraries/benchmark.rst b/user_guide_src/source/libraries/benchmark.rst
index 5b86142..7a0313f 100644
--- a/user_guide_src/source/libraries/benchmark.rst
+++ b/user_guide_src/source/libraries/benchmark.rst
@@ -13,10 +13,16 @@
 view to the browser, enabling a very accurate timing of the entire
 system execution to be shown.
 
-.. contents:: Table of Contents
+.. contents::
+  :local:
 
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
+*************************
 Using the Benchmark Class
-=========================
+*************************
 
 The Benchmark class can be used within your
 :doc:`controllers </general/controllers>`,
@@ -68,7 +74,7 @@
 
 	// Some code happens here...
 
-	$this->benchmark->mark('my_mark_end'); 
+	$this->benchmark->mark('my_mark_end');
 
 	$this->benchmark->mark('another_mark_start');
 
@@ -120,3 +126,42 @@
 
 	{memory_usage}
 
+
+***************
+Class Reference
+***************
+
+.. class:: CI_Benchmark
+
+	.. method:: mark($name)
+
+		:param string $name: the name you wish to assign to your marker
+		:returns: void
+
+		Sets a benchmark marker.
+
+
+	.. method:: elapsed_time([$point1 = ''[, $point2 = ''[, $decimals = 4]]])
+
+		:param string $point1: a particular marked point
+		:param string $point2: a particular marked point
+		:param int $decimals: number of decimal places for precision
+		:returns: string
+
+		Calculates and returns the time difference between two marked points.
+
+		If the first parameter is empty this function instead returns the
+		``{elapsed_time}`` pseudo-variable. This permits the full system
+		execution time to be shown in a template. The output class will
+		swap the real value for this variable.
+
+
+	.. method:: memory_usage()
+
+		:returns: string
+
+		Simply returns the ``{memory_usage}`` marker.
+
+		This permits it to be put it anywhere in a template without the memory
+		being calculated until the end. The :doc:`Output Class <output>` will
+		swap the real value for this variable.
\ No newline at end of file
diff --git a/user_guide_src/source/libraries/caching.rst b/user_guide_src/source/libraries/caching.rst
index 3f7dc2d..30a9fed 100644
--- a/user_guide_src/source/libraries/caching.rst
+++ b/user_guide_src/source/libraries/caching.rst
@@ -7,7 +7,12 @@
 server requirements, and a Fatal Exception will be thrown if server
 requirements are not met.
 
-.. contents:: Table of Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 *************
 Example Usage
@@ -20,16 +25,16 @@
 ::
 
 	$this->load->driver('cache', array('adapter' => 'apc', 'backup' => 'file'));
-	
+
 	if ( ! $foo = $this->cache->get('foo'))
 	{
 		echo 'Saving to the cache!<br />';
 		$foo = 'foobarbaz!';
-		
+
 		// Save into the cache for 5 minutes
 		$this->cache->save('foo', $foo, 300);
 	}
-	
+
 	echo $foo;
 
 You can also prefix cache item names via the **key_prefix** setting, which is useful
@@ -43,28 +48,23 @@
 
 	$this->cache->get('foo'); // Will get the cache entry named 'my_foo'
 
-******************
-Function Reference
-******************
+***************
+Class Reference
+***************
 
-.. php:class:: CI_Cache
+.. class:: CI_Cache
 
-is_supported()
-==============
+	.. method:: is_supported($driver)
 
-	.. php:method:: is_supported ( $driver )
-
-		This function is automatically called when accessing drivers via
-		$this->cache->get(). However, if the individual drivers are used, make
-		sure to call this function to ensure the driver is supported in the
-		hosting environment.
-		
 		:param string $driver: the name of the caching driver
 		:returns: TRUE if supported, FALSE if not
-		:rtype: Boolean
-		
+
+		This method is automatically called when accessing drivers via
+		``$this->cache->get()``. However, if the individual drivers are used,
+		make sure to call this method to ensure the driver is supported in the
+		hosting environment.
 		::
-				
+
 			if ($this->cache->apc->is_supported()
 			{
 				if ($data = $this->cache->apc->get('my_cache'))
@@ -73,103 +73,104 @@
 				}
 			}
 
-
-get()
-=====
-
-	.. php:method:: get ( $id )
-	
-		This function will attempt to fetch an item from the cache store. If the
-		item does not exist, the function will return FALSE.
+	.. method:: get($id)
 
 		:param string $id: name of cached item
 		:returns: The item if it exists, FALSE if it does not
-		:rtype: Mixed
-		
+
+		This method will attempt to fetch an item from the cache store. If the
+		item does not exist, the method will return FALSE.
 		::
 
 			$foo = $this->cache->get('my_cached_item');
 
-
-save()
-======
-
-	.. php:method:: save ( $id , $data [, $ttl])
-	
-		This function will save an item to the cache store. If saving fails, the
-		function will return FALSE.
+	.. method:: save($id, $data[, $ttl = 60[, $raw = FALSE]])
 
 		:param string $id: name of the cached item
 		:param mixed $data: the data to save
 		:param int $ttl: Time To Live, in seconds (default 60)
+		:param bool $raw: Whether to store the raw value
 		:returns: TRUE on success, FALSE on failure
-		:rtype: Boolean
 
+		This method will save an item to the cache store. If saving fails, the
+		method will return FALSE.
 		::
 
 			$this->cache->save('cache_item_id', 'data_to_cache');
-	
-delete()
-========
 
-	.. php:method:: delete ( $id )
-	
-		This function will delete a specific item from the cache store. If item
-		deletion fails, the function will return FALSE.
+		.. note:: The ``$raw`` parameter is only utilized by APC and Memcache,
+			in order to allow usage of ``increment()`` and ``decrement()``.
+
+	.. method:: delete($id)
 
 		:param string $id: name of cached item
 		:returns: TRUE if deleted, FALSE if the deletion fails
-		:rtype: Boolean
-		
+
+		This method will delete a specific item from the cache store. If item
+		deletion fails, the method will return FALSE.
 		::
 
 			$this->cache->delete('cache_item_id');
 
-clean()
-=======
+	.. method:: increment($id[, $offset = 1])
 
-	.. php:method:: clean ( )
-	
-		This function will 'clean' the entire cache. If the deletion of the
-		cache files fails, the function will return FALSE.
+		:param string $id: Cache ID
+		:param int $offset: Step/value to add
+		:returns: New value on success, FALSE on failure
+
+		Performs atomic incrementation of a raw stored value.
+		::
+
+			// 'iterator' has a value of 2
+
+			$this->cache->increment('iterator'); // 'iterator' is now 3
+
+			$this->cache->increment('iterator', 3); // 'iterator' is now 6
+
+	.. method:: decrement($id[, $offset = 1])
+
+		:param string $id: Cache ID
+		:param int $offset: Step/value to reduce by
+		:returns: New value on success, FALSE on failure
+
+		Performs atomic decrementation of a raw stored value.
+		::
+
+			// 'iterator' has a value of 6
+
+			$this->cache->decrement('iterator'); // 'iterator' is now 5
+
+			$this->cache->decrement('iterator', 2); // 'iterator' is now 3
+
+	.. method:: clean()
 
 		:returns: TRUE if deleted, FALSE if the deletion fails
-		:rtype: Boolean
-		
+
+		This method will 'clean' the entire cache. If the deletion of the
+		cache files fails, the method will return FALSE.
 		::
 
 			$this->cache->clean();
 
-cache_info()
-============
-
-	.. php:method:: cache_info ( )
-
-		This function will return information on the entire cache.
+	.. method:: cache_info()
 
 		:returns: information on the entire cache
-		:rtype: Mixed
-		
+
+		This method will return information on the entire cache.
 		::
 
 			var_dump($this->cache->cache_info());
-		
+
 		.. note:: The information returned and the structure of the data is dependent
 			on which adapter is being used.
-	
 
-get_metadata()
-==============
+	.. method:: get_metadata($id)
 
-	.. php:method:: get_metadata ( $id )
-	
-		This function will return detailed information on a specific item in the
-		cache.
-		
 		:param string $id: name of cached item
 		:returns: metadadta for the cached item
-		:rtype: Mixed
-		
+
+		This method will return detailed information on a specific item in the
+		cache.
 		::
 
 			var_dump($this->cache->get_metadata('my_cached_item'));
@@ -184,7 +185,7 @@
 Alternative PHP Cache (APC) Caching
 ===================================
 
-All of the functions listed above can be accessed without passing a
+All of the methods listed above can be accessed without passing a
 specific adapter to the driver loader as follows::
 
 	$this->load->driver('cache');
@@ -201,7 +202,7 @@
 make sure to benchmark your application, as a point can come where disk
 I/O will negate positive gains by caching.
 
-All of the functions listed above can be accessed without passing a
+All of the methods listed above can be accessed without passing a
 specific adapter to the driver loader as follows::
 
 	$this->load->driver('cache');
@@ -227,7 +228,7 @@
 
 Under Windows, you can also utilize the WinCache driver.
 
-All of the functions listed above can be accessed without passing a
+All of the methods listed above can be accessed without passing a
 specific adapter to the driver loader as follows::
 
 	$this->load->driver('cache');
diff --git a/user_guide_src/source/libraries/calendar.rst b/user_guide_src/source/libraries/calendar.rst
index ed2a14c..3879672 100644
--- a/user_guide_src/source/libraries/calendar.rst
+++ b/user_guide_src/source/libraries/calendar.rst
@@ -7,6 +7,17 @@
 allowing 100% control over every aspect of its design. In addition, you
 can pass data to your calendar cells.
 
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
+***************************
+Using the Calendaring Class
+***************************
+
 Initializing the Class
 ======================
 
@@ -86,23 +97,23 @@
 month heading, and the "short" day names. More information regarding
 preferences below.
 
-======================  =================  ===============================================  ===================================================================
-Preference              Default            Options                                          Description
-======================  =================  ===============================================  ===================================================================
-**template**           	None               None                                             A string containing your calendar template.
-											      See the template section below.
-**local_time**        	time()             None                                             A Unix timestamp corresponding to the current time.
-**start_day**           sunday             Any week day (sunday, monday, tuesday, etc.)     Sets the day of the week the calendar should start on.
-**month_type**          long               long, short                                      Determines what version of the month name to use in the header.
-											      long = January, short = Jan.
-**day_type**            abr                long, short, abr                                 Determines what version of the weekday names to use in
-											      the column headers. long = Sunday, short = Sun, abr = Su.
-**show_next_prev**      FALSE              TRUE/FALSE (boolean)                             Determines whether to display links allowing you to toggle
-											      to next/previous months. See information on this feature below.
-**next_prev_url**       controller/method  A URL                                            Sets the basepath used in the next/previous calendar links.
-**show_other_days**     FALSE              TRUE/FALSE (boolean)                             Determines whether to display days of other months that share the
-											      first or last week of the calendar month.
-======================  =================  ===============================================  ===================================================================
+======================  =================  ============================================  ===================================================================
+Preference              Default            Options                                       Description
+======================  =================  ============================================  ===================================================================
+**template**           	None               None                                          A string containing your calendar template.
+											   See the template section below.
+**local_time**        	time()             None                                          A Unix timestamp corresponding to the current time.
+**start_day**           sunday             Any week day (sunday, monday, tuesday, etc.)  Sets the day of the week the calendar should start on.
+**month_type**          long               long, short                                   Determines what version of the month name to use in the header.
+											   long = January, short = Jan.
+**day_type**            abr                long, short, abr                              Determines what version of the weekday names to use in
+											   the column headers. long = Sunday, short = Sun, abr = Su.
+**show_next_prev**      FALSE              TRUE/FALSE (boolean)                          Determines whether to display links allowing you to toggle
+											   to next/previous months. See information on this feature below.
+**next_prev_url**       controller/method  A URL                                         Sets the basepath used in the next/previous calendar links.
+**show_other_days**     FALSE              TRUE/FALSE (boolean)                          Determines whether to display days of other months that share the
+											   first or last week of the calendar month.
+======================  =================  ============================================  ===================================================================
 
 
 Showing Next/Previous Month Links
@@ -180,4 +191,95 @@
 
 	$this->load->library('calendar', $prefs);
 
-	echo $this->calendar->generate();
\ No newline at end of file
+	echo $this->calendar->generate();
+
+***************
+Class Reference
+***************
+
+.. class:: CI_Calendar
+
+	.. method:: initialize([$config = array()])
+
+		:param array $config: config preferences
+		:returns: void
+
+		Initializes the Calendaring preferences. Accepts an associative array as input, containing display preferences.
+
+
+	.. method:: generate([$year = ''[, $month = ''[, $data = array()]]])
+
+		:param int $year: the year
+		:param int $month: the month
+		:param array $data: the data to be shown in the calendar cells
+		:returns: string
+
+		Generate the calendar.
+
+
+	.. method:: get_month_name($month)
+
+		:param int $month: the numeric month
+		:returns: string
+
+		Generates a textual month name based on the numeric month provided.
+
+
+	.. method:: get_day_names($day_type = '')
+
+		:param string $day_type: one of 'long', 'short', or 'abr'
+		:returns: array
+
+		Returns an array of day names (Sunday, Monday, etc.) based on the type
+		provided. Options: long, short, abr. If no ``$day_type`` is provided (or
+		if an invalid type is provided) this method will return the "abbreviated"
+		style.
+
+
+	.. method:: adjust_date($month, $year)
+
+		:param int $month: the month
+		:param int $year: the year
+		:returns: array
+
+		This method makes usre that you have a valid month/year. For example, if
+		you submit 13 as the month, the year will increment and the month will
+		become January::
+
+			print_r($this->calendar->adjust_date(13, 2013));
+
+		outputs::
+
+			Array
+			(    
+				[month] => '01'
+				[year] => '2014'
+			)
+
+
+	.. method:: get_total_days($month, $year)
+
+		:param int $month: the month
+		:param int $year: the year
+		:returns: int
+
+		Total days in a given month::
+
+			echo $this->calendar->get_total_days(2, 2012);
+			// 29
+
+
+	.. method:: default_template()
+
+		:returns: array
+
+		Sets the default template. This method is used when you have not created
+		your own template.
+
+
+	.. method:: parse_template()
+
+		:returns: void
+
+		Harvests the data within the template ``{pseudo-variables}`` used to
+		display the calendar.
\ No newline at end of file
diff --git a/user_guide_src/source/libraries/cart.rst b/user_guide_src/source/libraries/cart.rst
index 716e94b..ad1955d 100644
--- a/user_guide_src/source/libraries/cart.rst
+++ b/user_guide_src/source/libraries/cart.rst
@@ -11,7 +11,16 @@
 functionality. It does not provide shipping, credit card authorization,
 or other processing components.
 
-.. contents:: Page Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
+********************
+Using the Cart Class
+********************
 
 Initializing the Shopping Cart Class
 ====================================
@@ -29,7 +38,7 @@
 	$this->load->library('cart');
 
 Once loaded, the Cart object will be available using::
- 	
+
 	$this->cart
 
 .. note:: The Cart Class will load and initialize the Session Class
@@ -179,7 +188,7 @@
 	</table>
 
 	<p><?php echo form_submit('', 'Update your Cart'); ?></p>
-	
+
 Updating The Cart
 =================
 
@@ -197,7 +206,7 @@
 	               'qty'   => 3
 	            );
 
-	$this->cart->update($data); 
+	$this->cart->update($data);
 
 	// Or a multi-dimensional array
 
@@ -243,66 +252,115 @@
 cart" page above for more information.
 
 
-Function Reference
-==================
+***************
+Class Reference
+***************
 
-$this->cart->insert();
-**********************
+.. class:: CI_Cart
 
-Permits you to add items to the shopping cart, as outlined above.
+	.. attribute:: $product_id_rules = '\.a-z0-9_-'
 
-$this->cart->update();
-**********************
+		These are the regular expression rules that we use to validate the product
+		ID - alpha-numeric, dashes, underscores, or periods by default
 
-Permits you to update items in the shopping cart, as outlined above.
+	.. attribute:: $product_name_rules	= '\w \-\.\:'
 
-$this->cart->remove(rowid);
-***************************
+		These are the regular expression rules that we use to validate the product ID and product name - alpha-numeric, dashes, underscores, colons or periods by
+		default
 
-Allows you to remove an item from the shopping cart by passing it the rowid.
+	.. attribute:: $product_name_safe = TRUE
 
-$this->cart->total();
-*********************
+		Whether or not to only allow safe product names. Default TRUE.
 
-Displays the total amount in the cart.
 
-$this->cart->total_items();
-***************************
+	.. method:: insert([$items = array()])
 
-Displays the total number of items in the cart.
+		:param array $items: the items to insert into the cart
+		:returns: bool
 
-$this->cart->contents(boolean);
-*******************************
+		Insert items into the cart and save it to the session table. Returns TRUE
+		on success and FALSE on failure.
 
-Returns an array containing everything in the cart. You can sort the order,
-by which this is returned by passing it "true" where the contents will be sorted
-from newest to oldest, by leaving this function blank, you'll automatically just get
-first added to the basket to last added to the basket.
 
-$this->cart->get_item($row_id);
-*******************************
+	.. method:: update([$items = array()])
 
-Returns an array containing data for the item matching the specified row ID,
-or FALSE if no such item exists.
+		:param array $items: the items to update in the cart
+		:returns: bool
 
-$this->cart->has_options($row_id);
-**********************************
+		This method permits the quantity of a given item to be changed.
+		Typically it is called from the "view cart" page if a user makes changes
+		to the quantity before checkout. That array must contain the product ID
+		and quantity for each item.
 
-Returns TRUE (boolean) if a particular row in the cart contains options.
-This function is designed to be used in a loop with
-$this->cart->contents(), since you must pass the rowid to this function,
-as shown in the Displaying the Cart example above.
 
-$this->cart->product_options($row_id);
-**************************************
+	.. method:: remove($rowid)
 
-Returns an array of options for a particular product. This function is
-designed to be used in a loop with $this->cart->contents(), since you
-must pass the rowid to this function, as shown in the Displaying the
-Cart example above.
+		:param int $rowid: the ID of the item to remove from the cart
+		:returns: bool
 
-$this->cart->destroy();
-***********************
+		Allows you to remove an item from the shopping cart by passing it the
+		``$rowid``.
 
-Permits you to destroy the cart. This function will likely be called
-when you are finished processing the customer's order.
+
+	.. method:: total()
+
+		:returns: int
+
+		Displays the total amount in the cart.
+
+
+	.. method:: total_items()
+
+		:returns: int
+
+		Displays the total number of items in the cart.
+
+
+	.. method:: contents([$newest_first = FALSE])
+
+		:param bool $newest_first: order the array with newest first?
+		:returns: array
+
+		Returns an array containing everything in the cart. You can sort the
+		order by which the array is returned by passing it TRUE where the contents
+		will be sorted from newest to oldest, otherwise it is sorted from oldest
+		to newest.
+
+
+	.. method:: get_item($row_id)
+
+		:param int $row_id: the row ID to retrieve
+		:returns: array
+
+		Returns an array containing data for the item matching the specified row
+		ID, or FALSE if no such item exists.
+
+
+	.. method:: has_options($row_id = '')
+
+		:param int $row_id: the row ID to inspect
+		:returns: bool
+
+		Returns TRUE (boolean) if a particular row in the cart contains options.
+		This method is designed to be used in a loop with :meth:contents:, since
+		you must pass the rowid to this function, as shown in the Displaying
+		the Cart example above.
+
+
+	.. method:: product_options([$row_id = ''])
+
+		:param int $row_id: the row ID
+		:returns: array
+
+		Returns an array of options for a particular product. This method is
+		designed to be used in a loop with :meth:contents:, since you
+		must pass the rowid to this method, as shown in the Displaying the
+		Cart example above.
+
+
+	.. method:: destroy()
+
+		:returns: void
+
+		Permits you to destroy the cart. This method will likely be called
+		when you are finished processing the customer's order.
\ No newline at end of file
diff --git a/user_guide_src/source/libraries/config.rst b/user_guide_src/source/libraries/config.rst
index 654dc4d..8663324 100644
--- a/user_guide_src/source/libraries/config.rst
+++ b/user_guide_src/source/libraries/config.rst
@@ -9,7 +9,16 @@
 .. note:: This class is initialized automatically by the system so there
 	is no need to do it manually.
 
-.. contents:: Page Contents
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
+*****************************
+Working with the Config Class
+*****************************
 
 Anatomy of a Config File
 ========================
@@ -157,27 +166,86 @@
 	that you wish to change for your environment. The config items declared in your environment
 	folders always overwrite those in your global config files.
 
-Helper Functions
-================
 
-The config class has the following helper functions:
+***************
+Class Reference
+***************
 
-$this->config->site_url();
-***************************
+.. class:: CI_Config
 
-This function retrieves the URL to your site, along with the "index"
-value you've specified in the config file.
+	.. attribute:: $config
 
-$this->config->base_url();
-***************************
+		Array of all loaded config values
 
-This function retrieves the URL to your site, plus an optional path such
-as to a stylesheet or image.
+	.. attribute:: $is_loaded
 
-The two functions above are normally accessed via the corresponding
-functions in the :doc:`URL Helper </helpers/url_helper>`.
+		Array of all loaded config files
 
-$this->config->system_url();
-*****************************
 
-This function retrieves the URL to your system folder.
+	.. method:: item($item[, $index=''])
+
+		:param string $item: config item name
+		:param string $index: index name, if the item is an element in a config
+			item that is itself an array.
+		:returns: mixed - the config item or FALSE if it does not exist
+
+		Fetch a config file item.
+
+
+	.. method:: set_item($item, $value)
+
+		:param string $item: config item name
+		:param string $value: config item value
+		:returns: void
+
+		Sets a config file item to the specified value.
+
+
+	.. method:: slash_item($item)
+
+		:param string $item: config item name
+		:returns: moxied - the config item (slashed) or FALSE if it does not exist
+
+		This method is identical to :meth:item:, except it appends a forward
+		slash to the end of the item, if it exists.
+
+
+	.. method:: load([$file = ''[, $use_sections = FALSE[, $fail_gracefully = FALSE]]])
+
+		:param string $file: Configuration file name
+		:param bool $use_sections: Whether config values shoud be loaded into
+			their own section (index of the main config array)
+		:param bool $fail_gracefully: Whether to return FALSE or to display an
+			error message
+		:returns: bool
+
+		Loads a configuration file.
+
+
+	.. method:: site_url()
+
+		:returns: string
+
+		This method retrieves the URL to your site, along with the "index" value
+		you've specified in the config file.
+
+		This method is normally accessed via the corresponding functions in the
+		:doc:`URL Helper </helpers/url_helper>`.
+
+
+	.. method:: base_url()
+
+		:returns: string
+
+		This method retrieves the URL to your site, plus an optional path such
+		as to a stylesheet or image.
+
+		This method is normally accessed via the corresponding functions in the
+		:doc:`URL Helper </helpers/url_helper>`.
+
+
+	.. method:: system_url()
+
+		:returns: string
+
+		This method retrieves the URL to your system folder.
diff --git a/user_guide_src/source/libraries/email.rst b/user_guide_src/source/libraries/email.rst
index 86f440a..ec63984 100644
--- a/user_guide_src/source/libraries/email.rst
+++ b/user_guide_src/source/libraries/email.rst
@@ -16,6 +16,17 @@
    BCC batches.
 -  Email Debugging tools
 
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
+***********************
+Using the Email Library
+***********************
+
 Sending Email
 =============
 
@@ -31,12 +42,12 @@
 	$this->load->library('email');
 
 	$this->email->from('your@example.com', 'Your Name');
-	$this->email->to('someone@example.com'); 
-	$this->email->cc('another@another-example.com'); 
-	$this->email->bcc('them@their-example.com'); 
+	$this->email->to('someone@example.com');
+	$this->email->cc('another@another-example.com');
+	$this->email->bcc('them@their-example.com');
 
 	$this->email->subject('Email Test');
-	$this->email->message('Testing the email class.');	
+	$this->email->message('Testing the email class.');
 
 	$this->email->send();
 
@@ -83,7 +94,7 @@
 =================== ====================== ============================ =======================================================================
 **useragent**       CodeIgniter            None                         The "user agent".
 **protocol**        mail                   mail, sendmail, or smtp      The mail sending protocol.
-**mailpath**        /usr/sbin/sendmail     None                         The server path to Sendmail. 
+**mailpath**        /usr/sbin/sendmail     None                         The server path to Sendmail.
 **smtp_host**       No Default             None                         SMTP Server Address.
 **smtp_user**       No Default             None                         SMTP Username.
 **smtp_pass**       No Default             None                         SMTP Password.
@@ -106,214 +117,6 @@
 **dsn**             FALSE                  TRUE or FALSE (boolean)      Enable notify message from server
 =================== ====================== ============================ =======================================================================
 
-Email Methods Reference
-=======================
-
-$this->email->from()
---------------------
-
-Sets the email address and name of the person sending the email::
-
-	$this->email->from('you@example.com', 'Your Name');
-
-You can also set a Return-Path, to help redirect undelivered mail::
-
-	$this->email->from('you@example.com', 'Your Name', 'returned_emails@example.com');
-	
-.. note:: Return-Path can't be used if you've configured
-	'smtp' as your protocol.
-
-$this->email->reply_to()
-------------------------
-
-Sets the reply-to address. If the information is not provided the
-information in the "from" method is used. Example::
-
-	$this->email->reply_to('you@example.com', 'Your Name');
-
-$this->email->to()
-------------------
-
-Sets the email address(s) of the recipient(s). Can be a single email, a
-comma-delimited list or an array::
-
-	$this->email->to('someone@example.com');
-
-::
-
-	$this->email->to('one@example.com, two@example.com, three@example.com');
-
-::
-
-	$list = array('one@example.com', 'two@example.com', 'three@example.com');
-
-	$this->email->to($list);
-
-$this->email->cc()
-------------------
-
-Sets the CC email address(s). Just like the "to", can be a single email,
-a comma-delimited list or an array.
-
-$this->email->bcc()
--------------------
-
-Sets the BCC email address(s). Just like the "to", can be a single
-email, a comma-delimited list or an array.
-
-$this->email->subject()
------------------------
-
-Sets the email subject::
-
-	$this->email->subject('This is my subject');
-
-$this->email->message()
------------------------
-
-Sets the email message body::
-
-	$this->email->message('This is my message');
-
-$this->email->set_alt_message()
--------------------------------
-
-Sets the alternative email message body::
-
-	$this->email->set_alt_message('This is the alternative message');
-
-This is an optional message string which can be used if you send HTML
-formatted email. It lets you specify an alternative message with no HTML
-formatting which is added to the header string for people who do not
-accept HTML email. If you do not set your own message CodeIgniter will
-extract the message from your HTML email and strip the tags.
-
-$this->email->set_header()
---------------------------
-
-Appends additional headers to the e-mail::
-
-	$this->email->set_header('Header1', 'Value1');
-	$this->email->set_header('Header2', 'Value2');
-
-$this->email->clear()
----------------------
-
-Initializes all the email variables to an empty state. This method is
-intended for use if you run the email sending method in a loop,
-permitting the data to be reset between cycles.
-
-::
-
-	foreach ($list as $name => $address)
-	{
-		$this->email->clear();
-
-		$this->email->to($address);
-		$this->email->from('your@example.com');
-		$this->email->subject('Here is your info '.$name);
-		$this->email->message('Hi '.$name.' Here is the info you requested.');
-		$this->email->send();
-	}
-
-If you set the parameter to TRUE any attachments will be cleared as
-well::
-
-	$this->email->clear(TRUE);
-
-$this->email->send()
---------------------
-
-The Email sending method. Returns boolean TRUE or FALSE based on
-success or failure, enabling it to be used conditionally::
-
-	if ( ! $this->email->send())
-	{
-		// Generate error
-	}
-
-This method will automatically clear all parameters if the request was
-successful. To stop this behaviour pass FALSE::
-
- 	if ($this->email->send(FALSE))
- 	{
- 		// Parameters won't be cleared
- 	}
-
-.. note:: In order to use the ``print_debugger()`` method, you need
-	to avoid clearing the email parameters.
-
-$this->email->attach()
-----------------------
-
-Enables you to send an attachment. Put the file path/name in the first
-parameter. For multiple attachments use the method multiple times.
-For example::
-
-	$this->email->attach('/path/to/photo1.jpg');
-	$this->email->attach('/path/to/photo2.jpg');
-	$this->email->attach('/path/to/photo3.jpg');
-
-To use the default disposition (attachment), leave the second parameter blank,
-otherwise use a custom disposition::
-
-	$this->email->attach('image.jpg', 'inline');
-
-You can use URL::
-
-	$this->email->attach('http://example.com/filename.pdf');
-
-If you'd like to use a custom file name, you can use the third paramater::
-
-	$this->email->attach('filename.pdf', 'attachment', 'report.pdf');
-
-If you need to use a buffer string instead of a real - physical - file you can
-use the first parameter as buffer, the third parameter as file name and the fourth
-parameter as mime-type::
-
-	$this->email->attach($buffer, 'attachment', 'report.pdf', 'application/pdf');
-
-$this->email->attachment_cid()
-------------------------------
- 
-Sets and returns an attachment's Content-ID, which enables your to embed an inline
-(picture) attachment into HTML. First parameter must be attached file.
- 
-::
- 
-	$filename = '/img/photo1.jpg';
-	$this->email->attach($filename);
-	foreach ($list as $address)
-	{
-		$this->email->to($address);
-		$cid = $this->email->attach_cid($filename);
-		$this->email->message('<img src='cid:". $cid ."' alt="photo1" />');
-		$this->email->send();
-	}
-
-CID for each Email have to be create again to be unique.
-
-$this->email->print_debugger()
-------------------------------
-
-Returns a string containing any server messages, the email headers, and
-the email messsage. Useful for debugging.
-
-You can optionally specify which parts of the message should be printed.
-Valid options are: **headers**, **subject**, **body**.
-
-Example::
-
-	// You need to pass FALSE while sending in order for the email data
-	// to not be cleared - if that happens, print_debugger() would have
-	// nothing to output.
-	$this->email->send(FALSE);
-
-	// Will only print the email headers, excluding the message subject and body
-	$this->email->print_debugger(array('headers'));
-
-.. note:: By default, all of the raw data will be printed.
-
 Overriding Word Wrapping
 ========================
 
@@ -330,6 +133,268 @@
 
 	More text that will be
 	wrapped normally.
-	
 
-Place the item you do not want word-wrapped between: {unwrap} {/unwrap}
\ No newline at end of file
+
+Place the item you do not want word-wrapped between: {unwrap} {/unwrap}
+
+***************
+Class Reference
+***************
+
+.. class:: CI_Email
+
+	.. method:: from($from[, $name = ''[, $return_path = NULL]])
+
+		:param string $from: "From" email address
+		:param string $name: "From" display name
+		:param string $return_path: optional email address to redirect undelivered email
+		:returns: CI_Email object for method chaining
+
+		Sets the email address and name of the person sending the email::
+
+			$this->email->from('you@example.com', 'Your Name');
+
+		You can also set a Return-Path, to help redirect undelivered mail::
+
+			$this->email->from('you@example.com', 'Your Name', 'returned_emails@example.com');
+
+		.. note:: Return-Path can't be used if you've configured 'smtp' as
+			your protocol.
+
+
+	.. method:: reply_to($replyto[, $name = ''])
+
+		:param string $replyto: email address for replies
+		:param string $name: display name for reply email address
+		:returns: CI_Email object for method chaining
+
+		Sets the reply-to address. If the information is not provided the
+		information in the :meth:from method is used. Example::
+
+			$this->email->reply_to('you@example.com', 'Your Name');
+
+
+	.. method:: to($to)
+
+		:param mixed $to: comma delimited string or array of email addresses
+		:returns: CI_Email object for method chaining
+
+		Sets the email address(s) of the recipient(s). Can be a single email
+		, a comma-delimited list or an array::
+
+			$this->email->to('someone@example.com');
+
+		::
+
+			$this->email->to('one@example.com, two@example.com, three@example.com');
+
+		::
+
+			$list = array('one@example.com', 'two@example.com', 'three@example.com');
+
+			$this->email->to($list);
+
+
+	.. method:: cc($cc)
+
+		:param mixed $cc: comma delimited string or array of email addresses
+		:returns: CI_Email object for method chaining
+
+		Sets the CC email address(s). Just like the "to", can be a single
+		email, a comma-delimited list or an array.
+
+
+	.. method:: bcc($bcc, $limit = '')
+
+		:param mixed $bcc: comma delimited string or array of email addresses
+		:param int $limit: Maximum number of emails to send per batch
+		:returns: CI_Email object for method chaining
+
+		Sets the BCC email address(s). Just like the "to", can be a single
+		email, a comma-delimited list or an array.
+
+		If ``$limit`` is set, "batch mode" will be enabled, which will send
+		the emails to batches, with each batch not exceeding the specified
+		``$limit``.
+
+
+	.. method:: subject($subject)
+
+		:param string $subject: email subject line
+		:returns: CI_Email object for method chaining
+
+		Sets the email subject::
+
+			$this->email->subject('This is my subject');
+
+
+	.. method:: message($body)
+
+		:param string $body: email body
+		:returns: CI_Email object for method chaining
+
+		Sets the email message body::
+
+			$this->email->message('This is my message');
+
+
+	.. method:: set_alt_message([$str = ''])
+
+		:param string $str: alternate email body
+		:returns: CI_Email object for method chaining
+
+		Sets the alternative email message body::
+
+			$this->email->set_alt_message('This is the alternative message');
+
+		This is an optional message string which can be used if you send
+		HTML formatted email. It lets you specify an alternative message
+		with no HTML formatting which is added to the header string for
+		people who do not accept HTML email. If you do not set your own
+		message CodeIgniter will extract the message from your HTML email
+		and strip the tags.
+
+	.. method:: set_header($header, $value)
+
+		:param string $header: header name
+		:param string $value: header value
+		:returns: void
+
+		Appends additional headers to the e-mail::
+
+			$this->email->set_header('Header1', 'Value1');
+			$this->email->set_header('Header2', 'Value2');
+
+
+	.. method:: clear([$clear_attachments = FALSE])
+
+		:param bool $clear_attachments: whether or not to clear attachments
+
+		Initializes all the email variables to an empty state. This method
+		is intended for use if you run the email sending method in a loop,
+		permitting the data to be reset between cycles.
+
+		::
+
+			foreach ($list as $name => $address)
+			{
+				$this->email->clear();
+
+				$this->email->to($address);
+				$this->email->from('your@example.com');
+				$this->email->subject('Here is your info '.$name);
+				$this->email->message('Hi '.$name.' Here is the info you requested.');
+				$this->email->send();
+			}
+
+		If you set the parameter to TRUE any attachments will be cleared as
+		well::
+
+			$this->email->clear(TRUE);
+
+
+	.. method:: send([$auto_clear = TRUE])
+
+		:param bool $auto_clear: Whether to :meth:clear automatically
+		:returns: bool
+
+		The Email sending method. Returns boolean TRUE or FALSE based on
+		success or failure, enabling it to be used conditionally::
+
+			if ( ! $this->email->send())
+			{
+				// Generate error
+			}
+
+		This method will automatically clear all parameters if the request was
+		successful. To stop this behaviour pass FALSE::
+
+		 	if ($this->email->send(FALSE))
+		 	{
+		 		// Parameters won't be cleared
+		 	}
+
+		.. note:: In order to use the ``print_debugger()`` method, you need
+			to avoid clearing the email parameters.
+
+
+	.. method:: attach($filename[, $disposition = ''[, $newname = NULL[, $mime = '']]])
+
+		:param string $filename: name of the file
+		:param string $disposition: 'disposition' of the attachment. Most
+			email clients make their own decision regardless of the MIME
+			specification used here. https://www.iana.org/assignments/cont-disp/cont-disp.xhtml
+		:param string $newname: custom name to use for the file in the email
+		:param string $mime: MIME type to use (useful for buffered data)
+		:returns: CI_Email object for method chaining
+
+		Enables you to send an attachment. Put the file path/name in the first
+		parameter. For multiple attachments use the method multiple times.
+		For example::
+
+			$this->email->attach('/path/to/photo1.jpg');
+			$this->email->attach('/path/to/photo2.jpg');
+			$this->email->attach('/path/to/photo3.jpg');
+
+		To use the default disposition (attachment), leave the second parameter blank,
+		otherwise use a custom disposition::
+
+			$this->email->attach('image.jpg', 'inline');
+
+		You can also use a URL::
+
+			$this->email->attach('http://example.com/filename.pdf');
+
+		If you'd like to use a custom file name, you can use the third paramater::
+
+			$this->email->attach('filename.pdf', 'attachment', 'report.pdf');
+
+		If you need to use a buffer string instead of a real - physical - file you can
+		use the first parameter as buffer, the third parameter as file name and the fourth
+		parameter as mime-type::
+
+			$this->email->attach($buffer, 'attachment', 'report.pdf', 'application/pdf');
+
+	.. method:: attachment_cid($filename)
+
+		:param string $filename: Existing attachment filename
+		:returns: string
+ 
+		Sets and returns an attachment's Content-ID, which enables your to embed an inline
+		(picture) attachment into HTML. First parameter must be the already attached file name.
+		::
+ 
+			$filename = '/img/photo1.jpg';
+			$this->email->attach($filename);
+			foreach ($list as $address)
+			{
+				$this->email->to($address);
+				$cid = $this->email->attach_cid($filename);
+				$this->email->message('<img src='cid:". $cid ."' alt="photo1" />');
+				$this->email->send();
+			}
+
+		.. note:: Content-ID for each e-mail must be re-created for it to be unique.
+
+	.. method:: print_debugger([$include = array('headers', 'subject', 'body')])
+
+		:param array $include: Which parts of the message to print out
+		:returns: string
+
+		Returns a string containing any server messages, the email headers, and
+		the email messsage. Useful for debugging.
+
+		You can optionally specify which parts of the message should be printed.
+		Valid options are: **headers**, **subject**, **body**.
+
+		Example::
+
+			// You need to pass FALSE while sending in order for the email data
+			// to not be cleared - if that happens, print_debugger() would have
+			// nothing to output.
+			$this->email->send(FALSE);
+
+			// Will only print the email headers, excluding the message subject and body
+			$this->email->print_debugger(array('headers'));
+
+		.. note:: By default, all of the raw data will be printed.
\ No newline at end of file
diff --git a/user_guide_src/source/libraries/encryption.rst b/user_guide_src/source/libraries/encryption.rst
index a381222..f7235bf 100644
--- a/user_guide_src/source/libraries/encryption.rst
+++ b/user_guide_src/source/libraries/encryption.rst
@@ -10,6 +10,17 @@
 "light" purposes. If Mcrypt is available, you'll be provided with a high
 degree of security appropriate for storage.
 
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
+****************************
+Using the Encryption Library
+****************************
+
 Setting your Key
 ================
 
@@ -61,104 +72,127 @@
 
 	$this->load->library('encrypt');
 
-Once loaded, the Encrypt library object will be available using:
-$this->encrypt
+Once loaded, the Encrypt library object will be available using
+``$this->encrypt``
 
-$this->encrypt->encode()
-========================
+***************
+Class Reference
+***************
 
-Performs the data encryption and returns it as a string. Example::
+.. class:: CI_Encrypt
 
-	$msg = 'My secret message';
+	.. method:: encode($string, $key = '')
 
-	$encrypted_string = $this->encrypt->encode($msg);
-	
+		:param string $string: contents to be encrypted
+		:param string $key: encryption key
+		:returns: string
 
-You can optionally pass your encryption key via the second parameter if
-you don't want to use the one in your config file::
+		Performs the data encryption and returns it as a string. Example::
 
-	$msg = 'My secret message';
-	$key = 'super-secret-key';
+			$msg = 'My secret message';
 
-	$encrypted_string = $this->encrypt->encode($msg, $key);
+			$encrypted_string = $this->encrypt->encode($msg);
 
-$this->encrypt->decode()
-========================
+		You can optionally pass your encryption key via the second parameter if
+		you don't want to use the one in your config file::
 
-Decrypts an encoded string. Example::
+			$msg = 'My secret message';
+			$key = 'super-secret-key';
 
-	$encrypted_string = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84';
+			$encrypted_string = $this->encrypt->encode($msg, $key);
 
-	$plaintext_string = $this->encrypt->decode($encrypted_string);
 
-You can optionally pass your encryption key via the second parameter if
-you don't want to use the one in your config file::
+	.. method:: decode($string, $key = '')
 
-	$msg = 'My secret message';
-	$key = 'super-secret-key';
+		:param string $string: contents to be decrypted
+		:param string $key: encryption key
+		:returns: string
 
-	$encrypted_string = $this->encrypt->decode($msg, $key);
+		Decrypts an encoded string. Example::
 
-$this->encrypt->set_cipher();
-==============================
+			$encrypted_string = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84';
 
-Permits you to set an Mcrypt cipher. By default it uses
-**MCRYPT_RIJNDAEL_256**. Example::
+			$plaintext_string = $this->encrypt->decode($encrypted_string);
 
-	$this->encrypt->set_cipher(MCRYPT_BLOWFISH);
+		You can optionally pass your encryption key via the second parameter if
+		you don't want to use the one in your config file::
 
-Please visit php.net for a list of `available
-ciphers <http://php.net/mcrypt>`_.
+			$msg = 'My secret message';
+			$key = 'super-secret-key';
 
-If you'd like to manually test whether your server supports Mcrypt you
-can use::
+			$encrypted_string = $this->encrypt->decode($msg, $key);
 
-	echo ( ! function_exists('mcrypt_encrypt')) ? 'Nope' : 'Yup';
 
-$this->encrypt->set_mode();
-============================
+	.. method:: set_cipher($cipher)
 
-Permits you to set an Mcrypt mode. By default it uses **MCRYPT_MODE_CBC**.
-Example::
+		:param int $cipher: valid PHP Mcrypt cypher constant
+		:returns: CI_Encrypt object for method chaining
 
-	$this->encrypt->set_mode(MCRYPT_MODE_CFB);
+		Permits you to set an Mcrypt cipher. By default it uses
+		**MCRYPT_RIJNDAEL_256**. Example::
 
-Please visit php.net for a list of `available
-modes <http://php.net/mcrypt>`_.
+			$this->encrypt->set_cipher(MCRYPT_BLOWFISH);
 
-$this->encrypt->encode_from_legacy($orig_data, $legacy_mode = MCRYPT_MODE_ECB, $key = '');
-==========================================================================================
+		Please visit php.net for a list of `available
+		ciphers <http://php.net/mcrypt>`_.
 
-Enables you to re-encode data that was originally encrypted with
-CodeIgniter 1.x to be compatible with the Encryption library in
-CodeIgniter 2.x. It is only necessary to use this method if you have
-encrypted data stored permanently such as in a file or database and are
-on a server that supports Mcrypt. "Light" use encryption such as
-encrypted session data or transitory encrypted flashdata require no
-intervention on your part. However, existing encrypted Sessions will be
-destroyed since data encrypted prior to 2.x will not be decoded.
+		If you'd like to manually test whether your server supports Mcrypt you
+		can use::
 
-.. important::
-	**Why only a method to re-encode the data instead of maintaining legacy
-	methods for both encoding and decoding?** The algorithms in the
-	Encryption library have improved in CodeIgniter 2.x both for performance
-	and security, and we do not wish to encourage continued use of the older
-	methods. You can of course extend the Encryption library if you wish and
-	replace the new methods with the old and retain seamless compatibility
-	with CodeIgniter 1.x encrypted data, but this a decision that a
-	developer should make cautiously and deliberately, if at all.
+			echo ( ! function_exists('mcrypt_encrypt')) ? 'Nope' : 'Yup';
 
-::
 
-	$new_data = $this->encrypt->encode_from_legacy($old_encrypted_string);
+	.. method:: set_mode($mode)
 
-======================	===============	 =======================================================================
-Parameter		 Default	  Description
-======================	===============  =======================================================================
-**$orig_data**		n/a 		 The original encrypted data from CodeIgniter 1.x's Encryption library
-**$legacy_mode**	MCRYPT_MODE_ECB	 The Mcrypt mode that was used to generate the original encrypted data.
-					 CodeIgniter 1.x's default was MCRYPT_MODE_ECB, and it will assume that
-					 to be the case unless overridden by this parameter.
-**$key**		n/a 		 The encryption key. This it typically specified in your config file as
-					 outlined above.
-======================	===============	 =======================================================================
\ No newline at end of file
+		:param int $mode: valid PHP Mcrypt mode constant
+		:returns: CI_Encrypt object for method chaining
+
+		Permits you to set an Mcrypt mode. By default it uses **MCRYPT_MODE_CBC**.
+		Example::
+
+			$this->encrypt->set_mode(MCRYPT_MODE_CFB);
+
+		Please visit php.net for a list of `available
+		modes <http://php.net/mcrypt>`_.
+
+
+	.. method:: encode_from_legacy($string[, $legacy_mode = MCRYPT_MODE_ECB[, $key = '']])
+
+		:param string $string: contents to be encrypted
+		:param int $legacy_mode: valid PHP Mcrypt cypher constant
+		:param string $key: encryption key
+		:returns: string
+
+		Enables you to re-encode data that was originally encrypted with
+		CodeIgniter 1.x to be compatible with the Encryption library in
+		CodeIgniter 2.x. It is only necessary to use this method if you have
+		encrypted data stored permanently such as in a file or database and are
+		on a server that supports Mcrypt. "Light" use encryption such as
+		encrypted session data or transitory encrypted flashdata require no
+		intervention on your part. However, existing encrypted Sessions will be
+		destroyed since data encrypted prior to 2.x will not be decoded.
+
+		.. important::
+			**Why only a method to re-encode the data instead of maintaining legacy
+			methods for both encoding and decoding?** The algorithms in the
+			Encryption library have improved in CodeIgniter 2.x both for performance
+			and security, and we do not wish to encourage continued use of the older
+			methods. You can of course extend the Encryption library if you wish and
+			replace the new methods with the old and retain seamless compatibility
+			with CodeIgniter 1.x encrypted data, but this a decision that a
+			developer should make cautiously and deliberately, if at all.
+
+		::
+
+			$new_data = $this->encrypt->encode_from_legacy($old_encrypted_string);
+
+		======================	===============	 =======================================================================
+		Parameter		 Default	  Description
+		======================	===============  =======================================================================
+		**$orig_data**		n/a 		 The original encrypted data from CodeIgniter 1.x's Encryption library
+		**$legacy_mode**	MCRYPT_MODE_ECB	 The Mcrypt mode that was used to generate the original encrypted data.
+							 CodeIgniter 1.x's default was MCRYPT_MODE_ECB, and it will assume that
+							 to be the case unless overridden by this parameter.
+		**$key**		n/a 		 The encryption key. This it typically specified in your config file as
+							 outlined above.
+		======================	===============	 =======================================================================
\ No newline at end of file
diff --git a/user_guide_src/source/libraries/file_uploading.rst b/user_guide_src/source/libraries/file_uploading.rst
index ac56fab..d679d8a 100644
--- a/user_guide_src/source/libraries/file_uploading.rst
+++ b/user_guide_src/source/libraries/file_uploading.rst
@@ -5,6 +5,13 @@
 CodeIgniter's File Uploading Class permits files to be uploaded. You can
 set various preferences, restricting the type and size of the files.
 
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
 ***********
 The Process
 ***********
@@ -245,105 +252,97 @@
 Class Reference
 ***************
 
-The following methods are available:
+.. class:: CI_Upload
 
-$this->upload->do_upload()
-==========================
+	.. method:: do_upload([$field = 'userfile'])
 
-Performs the upload based on the preferences you've set.
+		:param string $field: name of the form field
+		:returns: bool
 
-.. note:: By default the upload routine expects the file to come from
-	a form field called userfile, and the form must be of type
-	"multipart".
+		Performs the upload based on the preferences you've set.
 
-::
+		.. note:: By default the upload routine expects the file to come from
+			a form field called userfile, and the form must be of type
+			"multipart".
 
-	<form method="post" action="some_action" enctype="multipart/form-data" />
+		::
 
-If you would like to set your own field name simply pass its value to
-the ``do_upload()`` method::
+			<form method="post" action="some_action" enctype="multipart/form-data" />
 
-	$field_name = "some_field_name";
-	$this->upload->do_upload($field_name);
+		If you would like to set your own field name simply pass its value to
+		the ``do_upload()`` method::
 
-$this->upload->display_errors()
-===============================
+			$field_name = "some_field_name";
+			$this->upload->do_upload($field_name);
 
-Retrieves any error messages if the ``do_upload()`` method returned
-false. The method does not echo automatically, it returns the data so
-you can assign it however you need.
 
-Formatting Errors
-*****************
+	.. method:: display_errors([$open = '<p>'[, $close = '</p>']])
 
-By default the above method wraps any errors within <p> tags. You can
-set your own delimiters like this::
+		:param string $open: Opening markup
+		:param string $close: Closing markup
+		:returns: string
 
-	$this->upload->display_errors('<p>', '</p>');
+		Retrieves any error messages if the ``do_upload()`` method returned
+		false. The method does not echo automatically, it returns the data so
+		you can assign it however you need.
 
-$this->upload->data()
-=====================
+		**Formatting Errors**
 
-This is a helper method that returns an array containing all of the
-data related to the file you uploaded. Here is the array prototype::
+			By default the above method wraps any errors within <p> tags. You can
+			set your own delimiters like this::
 
-	Array
-	(
-		[file_name]	=> mypic.jpg
-		[file_type]	=> image/jpeg
-		[file_path]	=> /path/to/your/upload/
-		[full_path]	=> /path/to/your/upload/jpg.jpg
-		[raw_name]	=> mypic
-		[orig_name]	=> mypic.jpg
-		[client_name]	=> mypic.jpg
-		[file_ext]	=> .jpg
-		[file_size]	=> 22.2
-		[is_image]	=> 1
-		[image_width]	=> 800
-		[image_height]	=> 600
-		[image_type]	=> jpeg
-		[image_size_str] => width="800" height="200"
-	)
+				$this->upload->display_errors('<p>', '</p>');
 
-To return one element from the array::
 
-	$this->upload->data('file_name');	// Returns: mypic.jpg
+	.. method:: data([$index = NULL])
 
-Explanation
-***********
+		:param string $data: element to return instead of the full array
+		:returns: mixed
 
-Here is an explanation of the above array items.
+		This is a helper method that returns an array containing all of the
+		data related to the file you uploaded. Here is the array prototype::
 
-Item
-Description
-**file_name**
-The name of the file that was uploaded including the file extension.
-**file_type**
-The file's Mime type
-**file_path**
-The absolute server path to the file
-**full_path**
-The absolute server path including the file name
-**raw_name**
-The file name without the extension
-**orig_name**
-The original file name. This is only useful if you use the encrypted
-name option.
-**client_name**
-The file name as supplied by the client user agent, prior to any file
-name preparation or incrementing.
-**file_ext**
-The file extension with period
-**file_size**
-The file size in kilobytes
-**is_image**
-Whether the file is an image or not. 1 = image. 0 = not.
-**image_width**
-Image width.
-**image_height**
-Image height
-**image_type**
-Image type. Typically the file extension without the period.
-**image_size_str**
-A string containing the width and height. Useful to put into an image
-tag.
\ No newline at end of file
+			Array
+			(
+				[file_name]	=> mypic.jpg
+				[file_type]	=> image/jpeg
+				[file_path]	=> /path/to/your/upload/
+				[full_path]	=> /path/to/your/upload/jpg.jpg
+				[raw_name]	=> mypic
+				[orig_name]	=> mypic.jpg
+				[client_name]	=> mypic.jpg
+				[file_ext]	=> .jpg
+				[file_size]	=> 22.2
+				[is_image]	=> 1
+				[image_width]	=> 800
+				[image_height]	=> 600
+				[image_type]	=> jpeg
+				[image_size_str] => width="800" height="200"
+			)
+
+		To return one element from the array::
+
+			$this->upload->data('file_name');	// Returns: mypic.jpg
+
+		**Explanation**
+
+			Here is an explanation of the above array items.
+
+			================	================================================
+			Item							Description
+			================	================================================
+			file_name					The name of the file that was uploaded including the file extension.
+			file_type					The file's Mime type
+			file_path					The absolute server path to the file
+			full_path					The absolute server path including the file name
+			raw_name					The file name without the extension
+			orig_name					The original file name. This is only useful if you use the encrypted name option.
+			client_name				The file name as supplied by the client user agent, prior to any file name preparation or incrementing.
+			file_ext					The file extension with period
+			file_size					The file size in kilobytes
+			is_image					Whether the file is an image or not. 1 = image. 0 = not.
+			image_width				Image width.
+			image_height			Image height
+			image_type				Image type. Typically the file extension without the period.
+			image_size_str		A string containing the width and height. Useful to put into an image tag.
+			================	================================================
diff --git a/user_guide_src/source/libraries/form_validation.rst b/user_guide_src/source/libraries/form_validation.rst
index 1076b14..42422f9 100644
--- a/user_guide_src/source/libraries/form_validation.rst
+++ b/user_guide_src/source/libraries/form_validation.rst
@@ -353,10 +353,10 @@
 	set_value('field name')
 
 Open your myform.php view file and update the **value** in each field
-using the ``set_value()`` function:
+using the :func:`set_value()` function:
 
-**Don't forget to include each field name in the ``set_value()``
-functions!**
+**Don't forget to include each field name in the :func:`set_value()`
+function calls!**
 
 ::
 
@@ -393,11 +393,11 @@
 Your form fields should now be re-populated
 
 .. note:: The :ref:`class-reference` section below
-	contains functions that permit you to re-populate <select> menus,
+	contains methods that permit you to re-populate <select> menus,
 	radio buttons, and checkboxes.
 
-**Important Note:** If you use an array as the name of a form field, you
-must supply it as an array to the function. Example::
+.. important:: If you use an array as the name of a form field, you
+	must supply it as an array to the function. Example::
 
 	<input type="text" name="colors[]" value="<?php echo set_value('colors[]'); ?>" size="50" />
 
@@ -497,8 +497,8 @@
 Where rule corresponds to the name of a particular rule, and Error
 Message is the text you would like displayed.
 
-If you'd like to include a field's "human" name, or the optional 
-parameter some rules allow for (such as max_length), you can add the 
+If you'd like to include a field's "human" name, or the optional
+parameter some rules allow for (such as max_length), you can add the
 **{field}** and **{param}** tags to your message, respectively::
 
 	$this->form_validation->set_message('min_length', '{field} must have at least {param} characters.');
@@ -579,7 +579,7 @@
 ===========================
 
 If you prefer to show an error message next to each form field, rather
-than as a list, you can use the ``form_error()`` function.
+than as a list, you can use the :func:`form_error()` function.
 
 Try it! Change your form so that it looks like this::
 
@@ -880,15 +880,15 @@
 ========================= ========== ============================================================================================= =======================
 Rule                      Parameter  Description                                                                                   Example
 ========================= ========== ============================================================================================= =======================
-**required**              No         Returns FALSE if the form element is empty.                                                                          
-**matches**               Yes        Returns FALSE if the form element does not match the one in the parameter.                    matches[form_item]     
-**differs**               Yes        Returns FALSE if the form element does not differ from the one in the parameter.              differs[form_item]     
-**is_unique**             Yes        Returns FALSE if the form element is not unique to the table and field name in the            is_unique[table.field] 
-                                     parameter. Note: This rule requires :doc:`Query Builder <../database/query_builder>` to be                             
+**required**              No         Returns FALSE if the form element is empty.
+**matches**               Yes        Returns FALSE if the form element does not match the one in the parameter.                    matches[form_item]
+**differs**               Yes        Returns FALSE if the form element does not differ from the one in the parameter.              differs[form_item]
+**is_unique**             Yes        Returns FALSE if the form element is not unique to the table and field name in the            is_unique[table.field]
+                                     parameter. Note: This rule requires :doc:`Query Builder <../database/query_builder>` to be
                                      enabled in order to work.
-**min_length**            Yes        Returns FALSE if the form element is shorter then the parameter value.                        min_length[3]         
-**max_length**            Yes        Returns FALSE if the form element is longer then the parameter value.                         max_length[12]         
-**exact_length**          Yes        Returns FALSE if the form element is not exactly the parameter value.                         exact_length[8]        
+**min_length**            Yes        Returns FALSE if the form element is shorter than the parameter value.                        min_length[3]
+**max_length**            Yes        Returns FALSE if the form element is longer than the parameter value.                         max_length[12]
+**exact_length**          Yes        Returns FALSE if the form element is not exactly the parameter value.                         exact_length[8]
 **greater_than**          Yes        Returns FALSE if the form element is less than or equal to the parameter value or not         greater_than[8]
                                      numeric.
 **greater_than_equal_to** Yes        Returns FALSE if the form element is less than the parameter value,                           greater_than_equal_to[8]
@@ -897,15 +897,15 @@
                                      not numeric.
 **less_than_equal_to**    Yes        Returns FALSE if the form element is greater than the parameter value,                        less_than_equal_to[8]
                                      or not numeric.
-**alpha**                 No         Returns FALSE if the form element contains anything other than alphabetical characters.                              
+**alpha**                 No         Returns FALSE if the form element contains anything other than alphabetical characters.
 **alpha_numeric**         No         Returns FALSE if the form element contains anything other than alpha-numeric characters.
 **alpha_numeric_spaces**  No         Returns FALSE if the form element contains anything other than alpha-numeric characters
-                                     or spaces.  Should be used after trim to avoid spaces at the beginning or end.                             
-**alpha_dash**            No         Returns FALSE if the form element contains anything other than alpha-numeric characters,                             
-                                     underscores or dashes.                                                                                               
-**numeric**               No         Returns FALSE if the form element contains anything other than numeric characters.                                   
-**integer**               No         Returns FALSE if the form element contains anything other than an integer.                                           
-**decimal**               No         Returns FALSE if the form element contains anything other than a decimal number.                                     
+                                     or spaces.  Should be used after trim to avoid spaces at the beginning or end.
+**alpha_dash**            No         Returns FALSE if the form element contains anything other than alpha-numeric characters,
+                                     underscores or dashes.
+**numeric**               No         Returns FALSE if the form element contains anything other than numeric characters.
+**integer**               No         Returns FALSE if the form element contains anything other than an integer.
+**decimal**               No         Returns FALSE if the form element contains anything other than a decimal number.
 **is_natural**            No         Returns FALSE if the form element contains anything other than a natural number:
                                      0, 1, 2, 3, etc.
 **is_natural_no_zero**    No         Returns FALSE if the form element contains anything other than a natural
@@ -954,155 +954,108 @@
 Class Reference
 ***************
 
-.. php:class:: Form_validation
+.. class:: CI_Form_validation
 
-The following methods are intended for use in your controller.
-
-$this->form_validation->set_rules()
-===================================
-
-	.. php:method:: set_rules ($field, $label = '', $rules = '', $errors = array())
+	.. method:: set_rules($field[, $label = ''[, $rules = '']])
 
 		:param string $field: The field name
 		:param string $label: The field label
 		:param mixed $rules: The rules, as a string with rules separated by a pipe "|", or an array or rules.
-		:param array $errors: Custom error messages
-		:rtype: Object
+		:returns: object
 
 		Permits you to set validation rules, as described in the tutorial
 		sections above:
 
-	-  :ref:`setting-validation-rules`
-	-  :ref:`saving-groups`
+		-  :ref:`setting-validation-rules`
+		-  :ref:`saving-groups`
 
-$this->form_validation->run()
-=============================
-	
-	.. php:method:: run ($group = '')
+	.. method:: run([$group = ''])
 
 		:param string $group: The name of the validation group to run
-		:rtype: Boolean
+		:returns: bool
 
 		Runs the validation routines. Returns boolean TRUE on success and FALSE
 		on failure. You can optionally pass the name of the validation group via
 		the method, as described in: :ref:`saving-groups`
 
-$this->form_validation->set_message()
-=====================================
-	
-	.. php:method:: set_message ($lang, $val = '')
+	.. method:: set_message($lang[, $val = ''])
 
 		:param string $lang: The rule the message is for
 		:param string $val: The message
-		:rtype: Object
+		:returns: object
 
 		Permits you to set custom error messages. See :ref:`setting-error-messages`
 
-$this->form_validation->set_data()
-==================================
-	
-	.. php:method:: set_data ($data = '')
+	.. method:: set_error_delimiters([$prefix = '<p>'[, $suffix = '</p>']])
+
+		:param string $prefix: Error message prefix
+		:param string $suffix: Error message suffix
+		:returns: object
+
+		Sets the default prefix and suffix for error messages.
+
+	.. method:: set_data($data)
 
 		:param array $data: The data to validate
+		:returns: void
 
 		Permits you to set an array for validation, instead of using the default
-		$_POST array.
+		``$_POST`` array.
 
-$this->form_validation->reset_validation()
-==========================================
+	.. method:: reset_validation()
 
-	.. php:method:: reset_validation ()
+		:returns: void
 
 		Permits you to reset the validation when you validate more than one array.
 		This method should be called before validating each new array.
 
-$this->form_validation->error_array()
-=====================================
-	
-	.. php:method:: error_array ()
+	.. method:: error_array()
 
-		:rtype: Array
+		:returns: array
 
 		Returns the error messages as an array.
 
+	.. method:: error_string([$prefix = ''[, $suffix = '']])
+
+		:param string $prefix: Error message prefix
+		:param string $suffix: Error message suffix
+		:returns: string
+
+		Returns all error messages (as returned from error_array()) formatted as a
+		string and separated by a newline character.
+
+	.. method:: error($field[, $prefix = ''[, $suffix = '']])
+
+		:param string $field: Field name
+		:param string $prefix: Optional prefix
+		:param string $suffix: Optional suffix
+		:returns: string
+
+		Returns the error message for a specific field, optionally adding a
+		prefix and/or suffix to it (usually HTML tags).
+
+	.. method:: has_rule($field)
+
+		:param string $field: Field name
+		:returns: bool
+
+		Checks to see if there is a rule set for the specified field.
+
 .. _helper-functions:
 
 ****************
 Helper Reference
 ****************
 
-The following helper functions are available for use in the view files
-containing your forms. Note that these are procedural functions, so they
-**do not** require you to prepend them with $this->form_validation.
+Please refer to the :doc:`Form Helper <../helpers/form_helper>` manual for
+the following functions:
 
-form_error()
-============
+-  :func:`form_error()`
+-  :func:`validation_errors()`
+-  :func:`set_value()`
+-  :func:`set_select()`
+-  :func:`set_checkbox()`
+-  :func:`set_radio()`
 
-Shows an individual error message associated with the field name
-supplied to the function. Example::
-
-	<?php echo form_error('username'); ?>
-
-The error delimiters can be optionally specified. See the
-:ref:`changing-delimiters` section above.
-
-validation_errors()
-===================
-
-Shows all error messages as a string: Example::
-
-	<?php echo validation_errors(); ?>
-
-The error delimiters can be optionally specified. See the 
-:ref:`changing-delimiters` section above.
-
-set_value()
-===========
-
-Permits you to set the value of an input form or textarea. You must
-supply the field name via the first parameter of the function. The
-second (optional) parameter allows you to set a default value for the
-form. Example::
-
-	<input type="text" name="quantity" value="<?php echo set_value('quantity', '0'); ?>" size="50" />
-
-The above form will show "0" when loaded for the first time.
-
-set_select()
-============
-
-If you use a <select> menu, this function permits you to display the
-menu item that was selected. The first parameter must contain the name
-of the select menu, the second parameter must contain the value of each
-item, and the third (optional) parameter lets you set an item as the
-default (use boolean TRUE/FALSE).
-
-Example::
-
-	<select name="myselect">
-	<option value="one" <?php echo set_select('myselect', 'one', TRUE); ?> >One</option>
-	<option value="two" <?php echo set_select('myselect', 'two'); ?> >Two</option>
-	<option value="three" <?php echo set_select('myselect', 'three'); ?> >Three</option>
-	</select>
-
-set_checkbox()
-==============
-
-Permits you to display a checkbox in the state it was submitted. The
-first parameter must contain the name of the checkbox, the second
-parameter must contain its value, and the third (optional) parameter
-lets you set an item as the default (use boolean TRUE/FALSE). Example::
-
-	<input type="checkbox" name="mycheck[]" value="1" <?php echo set_checkbox('mycheck[]', '1'); ?> />
-	<input type="checkbox" name="mycheck[]" value="2" <?php echo set_checkbox('mycheck[]', '2'); ?> />
-
-set_radio()
-===========
-
-Permits you to display radio buttons in the state they were submitted.
-This function is identical to the **set_checkbox()** function above.
-
-::
-
-	<input type="radio" name="myradio" value="1" <?php echo set_radio('myradio', '1', TRUE); ?> />
-	<input type="radio" name="myradio" value="2" <?php echo set_radio('myradio', '2'); ?> />
+Note that these are procedural functions, so they **do not** require you
+to prepend them with ``$this->form_validation``.
\ No newline at end of file
diff --git a/user_guide_src/source/libraries/ftp.rst b/user_guide_src/source/libraries/ftp.rst
index 05a3fdc..c587869 100644
--- a/user_guide_src/source/libraries/ftp.rst
+++ b/user_guide_src/source/libraries/ftp.rst
@@ -10,9 +10,19 @@
 .. note:: SFTP and SSL FTP protocols are not supported, only standard
 	FTP.
 
-**********************
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
+**************************
+Working with the FTP Class
+**************************
+
 Initializing the Class
-**********************
+======================
 
 Like most other classes in CodeIgniter, the FTP class is initialized in
 your controller using the $this->load->library function::
@@ -27,7 +37,6 @@
 In this example a connection is opened to the FTP server, and a local
 file is read and uploaded in ASCII mode. The file permissions are set to
 755.
-
 ::
 
 	$this->load->library('ftp');
@@ -44,7 +53,6 @@
 	$this->ftp->close();
 
 In this example a list of files is retrieved from the server.
-
 ::
 
 	$this->load->library('ftp');
@@ -63,7 +71,6 @@
 	$this->ftp->close();
 
 In this example a local directory is mirrored on the server.
-
 ::
 
 	$this->load->library('ftp');
@@ -79,171 +86,207 @@
 
 	$this->ftp->close();
 
-******************
-Function Reference
-******************
+***************
+Class Reference
+***************
 
-$this->ftp->connect()
-=====================
+.. class:: CI_FTP
 
-Connects and logs into to the FTP server. Connection preferences are set
-by passing an array to the function, or you can store them in a config
-file.
+	.. method:: connect([$config = array()])
 
-Here is an example showing how you set preferences manually::
+		:param array $config: Connection values
+		:returns: bool
 
-	$this->load->library('ftp');
+		Connects and logs into to the FTP server. Connection preferences are set
+		by passing an array to the function, or you can store them in a config
+		file.
 
-	$config['hostname'] = 'ftp.example.com';
-	$config['username'] = 'your-username';
-	$config['password'] = 'your-password';
-	$config['port']     = 21;
-	$config['passive']  = FALSE;
-	$config['debug']    = TRUE;
+		Here is an example showing how you set preferences manually::
 
-	$this->ftp->connect($config);
+			$this->load->library('ftp');
 
-Setting FTP Preferences in a Config File
-****************************************
+			$config['hostname'] = 'ftp.example.com';
+			$config['username'] = 'your-username';
+			$config['password'] = 'your-password';
+			$config['port']     = 21;
+			$config['passive']  = FALSE;
+			$config['debug']    = TRUE;
 
-If you prefer you can store your FTP preferences in a config file.
-Simply create a new file called the ftp.php, add the $config array in
-that file. Then save the file at config/ftp.php and it will be used
-automatically.
+			$this->ftp->connect($config);
 
-Available connection options
-****************************
+		**Setting FTP Preferences in a Config File**
 
--  **hostname** - the FTP hostname. Usually something like:
-   ftp.example.com
--  **username** - the FTP username.
--  **password** - the FTP password.
--  **port** - The port number. Set to 21 by default.
--  **debug** - TRUE/FALSE (boolean). Whether to enable debugging to
-   display error messages.
--  **passive** - TRUE/FALSE (boolean). Whether to use passive mode.
-   Passive is set automatically by default.
+		If you prefer you can store your FTP preferences in a config file.
+		Simply create a new file called the ftp.php, add the $config array in
+		that file. Then save the file at *application/config/ftp.php* and it
+		will be used automatically.
 
-$this->ftp->upload()
-====================
+		**Available connection options**
 
-Uploads a file to your server. You must supply the local path and the
-remote path, and you can optionally set the mode and permissions.
-Example::
+		==================		===================================
+		Option Name			Description
+		==================		===================================
+		**hostname**			the FTP hostname. Usually something like: ftp.example.com
+		**username**			the FTP username
+		**password**			the FTP password
+		**port**			The port number. Set to 21 by default.
+		**debug**			TRUE/FALSE (boolean). Whether to enable debugging to display error messages.
+		**passive**			TRUE/FALSE (boolean). Whether to use passive mode. Passive is set automatically by default.
+		==================		===================================
 
-	$this->ftp->upload('/local/path/to/myfile.html', '/public_html/myfile.html', 'ascii', 0775);
+	.. method:: upload($locpath, $rempath[, $mode = 'auto'[, $permissions = NULL]])
 
-**Mode options are:** ascii, binary, and auto (the default). If auto is
-used it will base the mode on the file extension of the source file.
+		:param string $locpath: Local file path
+		:param string $rempath: Remote file path
+		:param string $mode: FTP mode, defaults to 'auto' (options are: 'auto', 'binary', 'ascii')
+		:param int $permissions: File permissions (octal)
+		:returns: bool
 
-If set, permissions have to be passed as an octal value.
+		Uploads a file to your server. You must supply the local path and the
+		remote path, and you can optionally set the mode and permissions.
+		Example::
 
-$this->ftp->download()
-======================
+			$this->ftp->upload('/local/path/to/myfile.html', '/public_html/myfile.html', 'ascii', 0775);
 
-Downloads a file from your server. You must supply the remote path and
-the local path, and you can optionally set the mode. Example::
+		If 'auto' mode is used it will base the mode on the file extension of the source file.
 
-	$this->ftp->download('/public_html/myfile.html', '/local/path/to/myfile.html', 'ascii');
+		If set, permissions have to be passed as an octal value.
 
-**Mode options are:** ascii, binary, and auto (the default). If auto is
-used it will base the mode on the file extension of the source file.
+	.. method:: download($rempath, $locpath[, $mode = 'auto'])
 
-Returns FALSE if the download does not execute successfully (including
-if PHP does not have permission to write the local file)
+		:param string $rempath: Remote file path
+		:param string $locpath: Local file path
+		:param string $mode: FTP mode, defaults to 'auto' (options are: 'auto', 'binary', 'ascii')
+		:returns: bool
 
-$this->ftp->rename()
-====================
+		Downloads a file from your server. You must supply the remote path and
+		the local path, and you can optionally set the mode. Example::
 
-Permits you to rename a file. Supply the source file name/path and the
-new file name/path.
+			$this->ftp->download('/public_html/myfile.html', '/local/path/to/myfile.html', 'ascii');
 
-::
+		If 'auto' mode is used it will base the mode on the file extension of the source file.
 
-	// Renames green.html to blue.html
-	$this->ftp->rename('/public_html/foo/green.html', '/public_html/foo/blue.html');
+		Returns FALSE if the download does not execute successfully (including if PHP does not have permission to write the local file).
 
-$this->ftp->move()
-==================
+	.. method:: rename($old_file, $new_file, $move = FALSE)
 
-Lets you move a file. Supply the source and destination paths::
+		:param string $old_file: Old file name
+		:param string $new_file: New file name
+		:param bool $move: Whether a move is being performed
+		:returns: bool
 
-	// Moves blog.html from "joe" to "fred"
-	$this->ftp->move('/public_html/joe/blog.html', '/public_html/fred/blog.html');
+		Permits you to rename a file. Supply the source file name/path and the new file name/path.
+		::
 
-Note: if the destination file name is different the file will be
-renamed.
+			// Renames green.html to blue.html
+			$this->ftp->rename('/public_html/foo/green.html', '/public_html/foo/blue.html');
 
-$this->ftp->delete_file()
-==========================
+	.. method:: move($old_file, $new_file)
 
-Lets you delete a file. Supply the source path with the file name.
+		:param string $old_file: Old file name
+		:param string $new_file: New file name
+		:returns: bool
 
-::
+		Lets you move a file. Supply the source and destination paths::
 
-	 $this->ftp->delete_file('/public_html/joe/blog.html');
+			// Moves blog.html from "joe" to "fred"
+			$this->ftp->move('/public_html/joe/blog.html', '/public_html/fred/blog.html');
 
-$this->ftp->delete_dir()
-=========================
+		.. note:: If the destination file name is different the file will be renamed.
 
-Lets you delete a directory and everything it contains. Supply the
-source path to the directory with a trailing slash.
+	.. method:: delete_file($filepath)
 
-**Important** Be VERY careful with this function. It will recursively
-delete **everything** within the supplied path, including sub-folders
-and all files. Make absolutely sure your path is correct. Try using the
-list_files() function first to verify that your path is correct.
+		:param string $filepath: Path to file to delete
+		:returns: bool
 
-::
+		Lets you delete a file. Supply the source path with the file name.
+		::
 
-	 $this->ftp->delete_dir('/public_html/path/to/folder/');
+			 $this->ftp->delete_file('/public_html/joe/blog.html');
 
-$this->ftp->list_files()
-=========================
+	.. method:: delete_dir($filepath)
 
-Permits you to retrieve a list of files on your server returned as an
-array. You must supply the path to the desired directory.
+		:param string $filepath: Path to directory to delete
+		:returns: bool
 
-::
+		Lets you delete a directory and everything it contains. Supply the
+		source path to the directory with a trailing slash.
 
-	$list = $this->ftp->list_files('/public_html/');
+		.. important:: Be VERY careful with this method!
+			It will recursively delete **everything** within the supplied path,
+			including sub-folders and all files. Make absolutely sure your path
+			is correct. Try using ``list_files()`` first to verify that your path is correct.
 
-	print_r($list);
+		::
 
-$this->ftp->mirror()
-====================
+			 $this->ftp->delete_dir('/public_html/path/to/folder/');
 
-Recursively reads a local folder and everything it contains (including
-sub-folders) and creates a mirror via FTP based on it. Whatever the
-directory structure of the original file path will be recreated on the
-server. You must supply a source path and a destination path::
+	.. method:: list_files([$path = '.'])
 
-	 $this->ftp->mirror('/path/to/myfolder/', '/public_html/myfolder/');
+		:param string $path: Directory path
+		:returns: array or FALSE on failure
 
-$this->ftp->mkdir()
-===================
+		Permits you to retrieve a list of files on your server returned as an
+		array. You must supply the path to the desired directory.
+		::
 
-Lets you create a directory on your server. Supply the path ending in
-the folder name you wish to create, with a trailing slash. Permissions
-can be set by passed an octal value in the second parameter (if you are
-running PHP 5).
+			$list = $this->ftp->list_files('/public_html/');
+			print_r($list);
 
-::
+	.. method:: mirror($locpath, $rempath)
 
-	// Creates a folder named "bar"
-	$this->ftp->mkdir('/public_html/foo/bar/', DIR_WRITE_MODE);
+		:param string $locpath: Local path
+		:param string $rempath: Remote path
+		:returns: bool
 
-$this->ftp->chmod()
-===================
+		Recursively reads a local folder and everything it contains (including
+		sub-folders) and creates a mirror via FTP based on it. Whatever the
+		directory structure of the original file path will be recreated on the
+		server. You must supply a source path and a destination path::
 
-Permits you to set file permissions. Supply the path to the file or
-folder you wish to alter permissions on::
+			 $this->ftp->mirror('/path/to/myfolder/', '/public_html/myfolder/');
 
-	// Chmod "bar" to 777
-	$this->ftp->chmod('/public_html/foo/bar/', DIR_WRITE_MODE);
+	.. method:: mkdir($path[, $permissions = NULL])
 
-$this->ftp->close();
-====================
+		:param string $path: Path to directory to create
+		:param int $permissions: Permissions (octal)
+		:returns: bool
 
-Closes the connection to your server. It's recommended that you use this
-when you are finished uploading.
+		Lets you create a directory on your server. Supply the path ending in
+		the folder name you wish to create, with a trailing slash.
+
+		Permissions can be set by passing an octal value in the second parameter.
+		::
+
+			// Creates a folder named "bar"
+			$this->ftp->mkdir('/public_html/foo/bar/', DIR_WRITE_MODE);
+
+	.. method:: chmod($path, $perm)
+
+		:param string $path: Path to alter permissions for
+		:param int $perm: Permissions (octal)
+		:returns: bool
+
+		Permits you to set file permissions. Supply the path to the file or
+		directory you wish to alter permissions on::
+
+			// Chmod "bar" to 777
+			$this->ftp->chmod('/public_html/foo/bar/', DIR_WRITE_MODE);
+
+	.. method:: changedir($path[, $suppress_debug = FALSE])
+
+		:param string $path: Directory path
+		:param bool $suppress_debug: Whether to turn off debug messages for this command
+		:returns: bool
+
+		Changes the current working directory to the specified path.
+
+		The ``$suppress_debug`` parameter is useful in case you want to use this method
+		as an ``is_dir()`` alternative for FTP.
+
+	.. method:: close()
+
+		:returns: bool
+
+		Closes the connection to your server. It's recommended that you use this
+		when you are finished uploading.
\ No newline at end of file
diff --git a/user_guide_src/source/libraries/image_lib.rst b/user_guide_src/source/libraries/image_lib.rst
index dcdccbd..ebdeaa7 100644
--- a/user_guide_src/source/libraries/image_lib.rst
+++ b/user_guide_src/source/libraries/image_lib.rst
@@ -29,7 +29,7 @@
 	$this->load->library('image_lib');
 
 Once the library is loaded it will be ready for use. The image library
-object you will use to call all functions is: $this->image_lib
+object you will use to call all functions is: ``$this->image_lib``
 
 Processing an Image
 ===================
@@ -67,18 +67,17 @@
 	while processing images you may need to limit their maximum size, and/or
 	adjust PHP memory limits.
 
-Processing Functions
-====================
+Processing Methods
+==================
 
-There are four available processing functions:
+There are four available processing methods:
 
 -  $this->image_lib->resize()
 -  $this->image_lib->crop()
 -  $this->image_lib->rotate()
 -  $this->image_lib->watermark()
--  $this->image_lib->clear()
 
-These functions return boolean TRUE upon success and FALSE for failure.
+These methods return boolean TRUE upon success and FALSE for failure.
 If they fail you can retrieve the error message using this function::
 
 	echo $this->image_lib->display_errors();
@@ -88,7 +87,7 @@
 
 	if ( ! $this->image_lib->resize())
 	{
-	    echo $this->image_lib->display_errors();
+		echo $this->image_lib->display_errors();
 	}
 
 .. note:: You can optionally specify the HTML formatting to be applied to
@@ -97,6 +96,8 @@
 
 	$this->image_lib->display_errors('<p>', '</p>');
 
+.. _processing-preferences:
+
 Preferences
 ===========
 
@@ -162,134 +163,10 @@
 If you prefer not to set preferences using the above method, you can
 instead put them into a config file. Simply create a new file called
 image_lib.php, add the $config array in that file. Then save the file
-in: config/image_lib.php and it will be used automatically. You will
-NOT need to use the $this->image_lib->initialize function if you save
+in *config/image_lib.php* and it will be used automatically. You will
+NOT need to use the ``$this->image_lib->initialize()`` method if you save
 your preferences in a config file.
 
-$this->image_lib->resize()
-===========================
-
-The image resizing function lets you resize the original image, create a
-copy (with or without resizing), or create a thumbnail image.
-
-For practical purposes there is no difference between creating a copy
-and creating a thumbnail except a thumb will have the thumbnail marker
-as part of the name (ie, mypic_thumb.jpg).
-
-All preferences listed in the table above are available for this
-function except these three: rotation_angle, x_axis, and y_axis.
-
-Creating a Thumbnail
---------------------
-
-The resizing function will create a thumbnail file (and preserve the
-original) if you set this preference to TRUE::
-
-	$config['create_thumb'] = TRUE;
-
-This single preference determines whether a thumbnail is created or not.
-
-Creating a Copy
----------------
-
-The resizing function will create a copy of the image file (and preserve
-the original) if you set a path and/or a new filename using this
-preference::
-
-	$config['new_image'] = '/path/to/new_image.jpg';
-
-Notes regarding this preference:
-
--  If only the new image name is specified it will be placed in the same
-   folder as the original
--  If only the path is specified, the new image will be placed in the
-   destination with the same name as the original.
--  If both the path and image name are specified it will placed in its
-   own destination and given the new name.
-
-Resizing the Original Image
----------------------------
-
-If neither of the two preferences listed above (create_thumb, and
-new_image) are used, the resizing function will instead target the
-original image for processing.
-
-$this->image_lib->crop()
-=========================
-
-The cropping function works nearly identically to the resizing function
-except it requires that you set preferences for the X and Y axis (in
-pixels) specifying where to crop, like this::
-
-	$config['x_axis'] = '100';
-	$config['y_axis'] = '40';
-
-All preferences listed in the table above are available for this
-function except these: rotation_angle, create_thumb, new_image.
-
-Here's an example showing how you might crop an image::
-
-	$config['image_library'] = 'imagemagick';
-	$config['library_path'] = '/usr/X11R6/bin/';
-	$config['source_image']	= '/path/to/image/mypic.jpg';
-	$config['x_axis'] = '100';
-	$config['y_axis'] = '60';
-
-	$this->image_lib->initialize($config); 
-
-	if ( ! $this->image_lib->crop())
-	{
-	    echo $this->image_lib->display_errors();
-	}
-
-.. note:: Without a visual interface it is difficult to crop images, so this
-	function is not very useful unless you intend to build such an
-	interface. That's exactly what we did using for the photo gallery module
-	in ExpressionEngine, the CMS we develop. We added a JavaScript UI that
-	lets the cropping area be selected.
-
-$this->image_lib->rotate()
-===========================
-
-The image rotation function requires that the angle of rotation be set
-via its preference::
-
-	$config['rotation_angle'] = '90';
-
-There are 5 rotation options:
-
-#. 90 - rotates counter-clockwise by 90 degrees.
-#. 180 - rotates counter-clockwise by 180 degrees.
-#. 270 - rotates counter-clockwise by 270 degrees.
-#. hor - flips the image horizontally.
-#. vrt - flips the image vertically.
-
-Here's an example showing how you might rotate an image::
-
-	$config['image_library'] = 'netpbm';
-	$config['library_path'] = '/usr/bin/';
-	$config['source_image']	= '/path/to/image/mypic.jpg';
-	$config['rotation_angle'] = 'hor';
-
-	$this->image_lib->initialize($config); 
-
-	if ( ! $this->image_lib->rotate())
-	{
-	    echo $this->image_lib->display_errors();
-	}
-
-$this->image_lib->clear()
-==========================
-
-The clear function resets all of the values used when processing an
-image. You will want to call this if you are processing images in a
-loop.
-
-::
-
-	$this->image_lib->clear();
-
-
 ******************
 Image Watermarking
 ******************
@@ -310,10 +187,12 @@
    image (usually a transparent PNG or GIF) containing your watermark
    over the source image.
 
+.. _watermarking:
+
 Watermarking an Image
 =====================
 
-Just as with the other functions (resizing, cropping, and rotating) the
+Just as with the other methods (resizing, cropping, and rotating) the
 general process for watermarking involves setting the preferences
 corresponding to the action you intend to perform, then calling the
 watermark function. Here is an example::
@@ -423,3 +302,158 @@
                                                                 coordinate to a pixel representative of the color you want to be
                                                                 transparent.
 ======================= =================== =================== ==========================================================================
+
+***************
+Class Reference
+***************
+
+.. class:: CI_Image_lib
+
+	.. method:: initialize([$props = array()])
+
+		:param array $props: Image processing preferences
+		:returns: void
+
+		Initializes the class for processing an image.
+
+	.. method:: resize()
+
+		:returns: bool
+
+		The image resizing method lets you resize the original image, create a
+		copy (with or without resizing), or create a thumbnail image.
+
+		For practical purposes there is no difference between creating a copy
+		and creating a thumbnail except a thumb will have the thumbnail marker
+		as part of the name (i.e. mypic_thumb.jpg).
+
+		All preferences listed in the :ref:`processing-preferences` table are available for this
+		method except these three: *rotation_angle*, *x_axis* and *y_axis*.
+
+		**Creating a Thumbnail**
+
+		The resizing method will create a thumbnail file (and preserve the
+		original) if you set this preference to TRUE::
+
+			$config['create_thumb'] = TRUE;
+
+		This single preference determines whether a thumbnail is created or not.
+
+		**Creating a Copy**
+
+		The resizing method will create a copy of the image file (and preserve
+		the original) if you set a path and/or a new filename using this
+		preference::
+
+			$config['new_image'] = '/path/to/new_image.jpg';
+
+		Notes regarding this preference:
+
+		-  If only the new image name is specified it will be placed in the same
+		   folder as the original
+		-  If only the path is specified, the new image will be placed in the
+		   destination with the same name as the original.
+		-  If both the path and image name are specified it will placed in its
+		   own destination and given the new name.
+
+		**Resizing the Original Image**
+
+		If neither of the two preferences listed above (create_thumb, and
+		new_image) are used, the resizing method will instead target the
+		original image for processing.
+
+	.. method:: crop()
+
+		:returns: bool
+
+		The cropping method works nearly identically to the resizing function
+		except it requires that you set preferences for the X and Y axis (in
+		pixels) specifying where to crop, like this::
+
+			$config['x_axis'] = '100';
+			$config['y_axis'] = '40';
+
+		All preferences listed in the :ref:`processing-preferences` table are available for this
+		method except these: *rotation_angle*, *create_thumb* and *new_image*.
+
+		Here's an example showing how you might crop an image::
+
+			$config['image_library'] = 'imagemagick';
+			$config['library_path'] = '/usr/X11R6/bin/';
+			$config['source_image']	= '/path/to/image/mypic.jpg';
+			$config['x_axis'] = '100';
+			$config['y_axis'] = '60';
+
+			$this->image_lib->initialize($config); 
+
+			if ( ! $this->image_lib->crop())
+			{
+				echo $this->image_lib->display_errors();
+			}
+
+		.. note:: Without a visual interface it is difficult to crop images, so this
+			method is not very useful unless you intend to build such an
+			interface. That's exactly what we did using for the photo gallery module
+			in ExpressionEngine, the CMS we develop. We added a JavaScript UI that
+			lets the cropping area be selected.
+
+	.. method:: rotate()
+
+		:returns: bool
+
+		The image rotation method requires that the angle of rotation be set
+		via its preference::
+
+			$config['rotation_angle'] = '90';
+
+		There are 5 rotation options:
+
+		#. 90 - rotates counter-clockwise by 90 degrees.
+		#. 180 - rotates counter-clockwise by 180 degrees.
+		#. 270 - rotates counter-clockwise by 270 degrees.
+		#. hor - flips the image horizontally.
+		#. vrt - flips the image vertically.
+
+		Here's an example showing how you might rotate an image::
+
+			$config['image_library'] = 'netpbm';
+			$config['library_path'] = '/usr/bin/';
+			$config['source_image']	= '/path/to/image/mypic.jpg';
+			$config['rotation_angle'] = 'hor';
+
+			$this->image_lib->initialize($config); 
+
+			if ( ! $this->image_lib->rotate())
+			{
+				echo $this->image_lib->display_errors();
+			}
+
+	.. method:: watermark()
+
+		:returns: bool
+
+		Creates a watermark over an image, please refer to the :ref:`watermarking`
+		section for more info.		
+
+	.. method:: clear()
+
+		:returns: void
+
+		The clear method resets all of the values used when processing an
+		image. You will want to call this if you are processing images in a
+		loop.
+
+		::
+
+			$this->image_lib->clear();
+
+	.. method:: display_errors([$open = '<p>[, $close = '</p>']])
+
+		:param string $open: Error message opening tag
+		:param string $close: Error message closing tag
+		:returns: string
+
+		Returns all detected errors formatted as a string.
+		::
+
+			echo $this->image_lib->diplay_errors();
\ No newline at end of file
diff --git a/user_guide_src/source/libraries/input.rst b/user_guide_src/source/libraries/input.rst
index 72746c1..8a83207 100644
--- a/user_guide_src/source/libraries/input.rst
+++ b/user_guide_src/source/libraries/input.rst
@@ -10,6 +10,13 @@
 .. note:: This class is initialized automatically by the system so there
 	is no need to do it manually.
 
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
 Security Filtering
 ==================
 
@@ -17,7 +24,7 @@
 :doc:`controller <../general/controllers>` is invoked. It does the
 following:
 
--  If $config['allow_get_array'] is FALSE (default is TRUE), destroys
+-  If ``$config['allow_get_array']`` is FALSE (default is TRUE), destroys
    the global GET array.
 -  Destroys all global variables in the event register_globals is
    turned on.
@@ -34,7 +41,7 @@
 The Input class has the ability to filter input automatically to prevent
 cross-site scripting attacks. If you want the filter to run
 automatically every time it encounters POST or COOKIE data you can
-enable it by opening your application/config/config.php file and setting
+enable it by opening your *application/config/config.php* file and setting
 this::
 
 	$config['global_xss_filtering'] = TRUE;
@@ -45,7 +52,7 @@
 Using POST, GET, COOKIE, or SERVER Data
 =======================================
 
-CodeIgniter comes with four helper methods that let you fetch POST, GET,
+CodeIgniter comes with helper methods that let you fetch POST, GET,
 COOKIE or SERVER items. The main advantage of using the provided
 methods rather than fetching an item directly (``$_POST['something']``)
 is that the methods will check to see if the item is set and return
@@ -59,98 +66,13 @@
 
 	$something = $this->input->post('something');
 
-The four methods are:
+The main methods are:
 
 -  $this->input->post()
 -  $this->input->get()
 -  $this->input->cookie()
 -  $this->input->server()
 
-$this->input->post()
-====================
-
-The first parameter will contain the name of the POST item you are
-looking for::
-
-	$this->input->post('some_data');
-
-The method returns NULL if the item you are attempting to retrieve
-does not exist.
-
-The second optional parameter lets you run the data through the XSS
-filter. It's enabled by setting the second parameter to boolean TRUE;
-
-::
-
-	$this->input->post('some_data', TRUE);
-
-To return an array of all POST items call without any parameters.
-
-To return all POST items and pass them through the XSS filter set the
-first parameter NULL while setting the second parameter to boolean;
-
-The method returns NULL if there are no items in the POST.
-
-::
-
-	$this->input->post(NULL, TRUE); // returns all POST items with XSS filter
-	$this->input->post(); // returns all POST items without XSS filter
-
-$this->input->get()
-===================
-
-This method is identical to the POST method, only it fetches GET data
-::
-
-	$this->input->get('some_data', TRUE);
-
-To return an array of all GET items call without any parameters.
-
-To return all GET items and pass them through the XSS filter set the
-first parameter NULL while setting the second parameter to boolean;
-
-The method returns NULL if there are no items in the GET.
-
-::
-
-	$this->input->get(NULL, TRUE); // returns all GET items with XSS filter
-	$this->input->get(); // returns all GET items without XSS filtering
-
-
-$this->input->post_get()
-========================
-
-This method will search through both the POST and GET streams for
-data, looking first in POST, and then in GET::
-
-	$this->input->post_get('some_data', TRUE);
-
-$this->input->get_post()
-========================
-
-This method will search through both the POST and GET streams for
-data, looking first in GET, and then in POST::
-
-	$this->input->get_post('some_data', TRUE);
-
-$this->input->cookie()
-======================
-
-This method is identical to the POST method, only it fetches cookie data
-::
-
-	$this->input->cookie('some_cookie');
-	$this->input->cookie('some_cookie, TRUE); // with XSS filter
-
-
-$this->input->server()
-======================
-
-This method is identical to the above methods, only it fetches server
-server data::
-
-	$this->input->server('some_data');
-
 Using the php://input stream
 ============================
 
@@ -167,165 +89,306 @@
 
 	$this->input->input_stream('key');
 
-Similar to the methods above, if the requested data is not found, it
-will return NULL and you can also decide whether to run the data
-through ``xss_clean()`` by passing a boolean value as the second
-parameter::
+Similar to other methods such as ``get()`` and ``post()``, if the
+requested data is not found, it will return NULL and you can also
+decide whether to run the data through ``xss_clean()`` by passing
+a boolean value as the second parameter::
 
 	$this->input->input_stream('key', TRUE); // XSS Clean
 	$this->input->input_stream('key', FALSE); // No XSS filter
 
-.. note:: You can utilize method() in order to know if you're reading
+.. note:: You can utilize ``method()`` in order to know if you're reading
 	PUT, DELETE or PATCH data.
 
-$this->input->set_cookie()
-==========================
+***************
+Class Reference
+***************
 
-Sets a cookie containing the values you specify. There are two ways to
-pass information to this method so that a cookie can be set: Array
-Method, and Discrete Parameters:
+.. class:: CI_Input
 
-Array Method
-^^^^^^^^^^^^
+	.. method:: post([$index = NULL[, $xss_clean = NULL]])
 
-Using this method, an associative array is passed to the first
-parameter::
+		:param string $index: POST parameter name
+		:param bool $xss_clean: Whether to apply XSS filtering
+		:returns: mixed
 
-	$cookie = array(
-	    'name'   => 'The Cookie Name',
-	    'value'  => 'The Value',
-	    'expire' => '86500',
-	    'domain' => '.some-domain.com',
-	    'path'   => '/',
-	    'prefix' => 'myprefix_',
-	    'secure' => TRUE
-	);
+		The first parameter will contain the name of the POST item you are
+		looking for::
 
-	$this->input->set_cookie($cookie);
+			$this->input->post('some_data');
 
-**Notes:**
+		The method returns NULL if the item you are attempting to retrieve
+		does not exist.
 
-Only the name and value are required. To delete a cookie set it with the
-expiration blank.
+		The second optional parameter lets you run the data through the XSS
+		filter. It's enabled by setting the second parameter to boolean TRUE
+		or by setting your ``$config['global_xss_filtering']`` to TRUE.
+		::
 
-The expiration is set in **seconds**, which will be added to the current
-time. Do not include the time, but rather only the number of seconds
-from *now* that you wish the cookie to be valid. If the expiration is
-set to zero the cookie will only last as long as the browser is open.
+			$this->input->post('some_data', TRUE);
 
-For site-wide cookies regardless of how your site is requested, add your
-URL to the **domain** starting with a period, like this:
-.your-domain.com
+		To return an array of all POST items call without any parameters.
 
-The path is usually not needed since the method sets a root path.
+		To return all POST items and pass them through the XSS filter set the
+		first parameter NULL while setting the second parameter to boolean TRUE.
+		::
 
-The prefix is only needed if you need to avoid name collisions with
-other identically named cookies for your server.
+			$this->input->post(NULL, TRUE); // returns all POST items with XSS filter
+			$this->input->post(NULL, FALSE); // returns all POST items without XSS filter
 
-The secure boolean is only needed if you want to make it a secure cookie
-by setting it to TRUE.
+	.. method:: get([$index = NULL[, $xss_clean = NULL]])
 
-Discrete Parameters
-^^^^^^^^^^^^^^^^^^^
+		:param string $index: GET parameter name
+		:param bool $xss_clean: Whether to apply XSS filtering
+		:returns: mixed
 
-If you prefer, you can set the cookie by passing data using individual
-parameters::
+		This method is identical to ``post()``, only it fetches GET data.
+		::
 
-	$this->input->set_cookie($name, $value, $expire, $domain, $path, $prefix, $secure);
+			$this->input->get('some_data', TRUE);
+
+		To return an array of all GET items call without any parameters.
+
+		To return all GET items and pass them through the XSS filter set the
+		first parameter NULL while setting the second parameter to boolean TRUE.
+		::
+
+			$this->input->get(NULL, TRUE); // returns all GET items with XSS filter
+			$this->input->get(NULL, FALSE); // returns all GET items without XSS filtering
+
+	.. method:: post_get([$index = ''[, $xss_clean = NULL]])
+
+		:param string $index: POST/GET parameter name
+		:param bool $xss_clean: Whether to apply XSS filtering
+		:returns: mixed
+
+		This method works the same way as ``post()`` and ``get()``, only combined.
+		It will search through both POST and GET streams for data, looking in POST
+		first, and then in GET::
+
+			$this->input->post_get('some_data', TRUE);
+
+	.. method:: get_post([$index = ''[, $xss_clean = NULL]])
+
+		:param string $index: GET/POST parameter name
+		:param bool $xss_clean: Whether to apply XSS filtering
+		:returns: mixed
+
+		This method works the same way as ``post_get()`` only it looks for GET
+		data first.
+
+			$this->input->get_post('some_data', TRUE);
+
+		.. note:: This method used to act EXACTLY like ``post_get()``, but it's
+			behavior has changed in CodeIgniter 3.0.
+
+	.. method:: cookie([$index = ''[, $xss_clean = NULL]])
+
+		:param string $index: COOKIE parameter name
+		:param bool $xss_clean: Whether to apply XSS filtering
+		:returns: mixed
+
+		This method is identical to ``post()`` and ``get()``, only it fetches cookie
+		data::
+
+			$this->input->cookie('some_cookie');
+			$this->input->cookie('some_cookie, TRUE); // with XSS filter
+
+	.. method:: server([$index = ''[, $xss_clean = NULL]])
+
+		:param string $index: Value name
+		:param bool $xss_clean: Whether to apply XSS filtering
+		:returns: mixed
+
+		This method is identical to the ``post()``, ``get()`` and ``cookie()`` methods,
+		only it fetches server data (``$_SERVER``)::
+
+			$this->input->server('some_data');
+
+	.. method:: input_stream([$index = ''[, $xss_clean = NULL]])
+
+		:param string $index: Key name
+		:param bool $xss_clean: Whether to apply XSS filtering
+		:returns: mixed
+
+		This method is identical to ``get()``, ``post()`` and ``cookie()``,
+		only it fetches the *php://input* stream data.
+
+	.. method:: set_cookie($name = ''[, $value = ''[, $expire = ''[, $domain = ''[, $path = '/'[, $prefix = ''[, $secure = FALSE[, $httponly = FALSE]]]]]]])
+
+		:param mixed $name: Cookie name or an array of parameters
+		:param string $value: Cookie value
+		:param int $expire: Cookie expiration time in seconds
+		:param string $domain: Cookie domain
+		:param string $path: Cookie path
+		:param string $prefix: Cookie name prefix
+		:param bool $secure: Whether to only transfer the cookie through HTTPS
+		:param bool $httponly: Whether to only make the cookie accessible for HTTP requests (no JavaScript)
+		:returns: void
+
+		Sets a cookie containing the values you specify. There are two ways to
+		pass information to this method so that a cookie can be set: Array
+		Method, and Discrete Parameters:
+
+		**Array Method**
+
+		Using this method, an associative array is passed to the first
+		parameter::
+
+			$cookie = array(
+				'name'   => 'The Cookie Name',
+				'value'  => 'The Value',
+				'expire' => '86500',
+				'domain' => '.some-domain.com',
+				'path'   => '/',
+				'prefix' => 'myprefix_',
+				'secure' => TRUE
+			);
+
+			$this->input->set_cookie($cookie);
+
+		**Notes:**
+
+		Only the name and value are required. To delete a cookie set it with the
+		expiration blank.
+
+		The expiration is set in **seconds**, which will be added to the current
+		time. Do not include the time, but rather only the number of seconds
+		from *now* that you wish the cookie to be valid. If the expiration is
+		set to zero the cookie will only last as long as the browser is open.
+
+		For site-wide cookies regardless of how your site is requested, add your
+		URL to the **domain** starting with a period, like this:
+		.your-domain.com
+
+		The path is usually not needed since the method sets a root path.
+
+		The prefix is only needed if you need to avoid name collisions with
+		other identically named cookies for your server.
+
+		The secure boolean is only needed if you want to make it a secure cookie
+		by setting it to TRUE.
+
+		**Discrete Parameters**
+
+		If you prefer, you can set the cookie by passing data using individual
+		parameters::
+
+			$this->input->set_cookie($name, $value, $expire, $domain, $path, $prefix, $secure);
 
 
-$this->input->ip_address()
-==========================
+	.. method:: ip_address()
 
-Returns the IP address for the current user. If the IP address is not
-valid, the method will return an IP of: 0.0.0.0
+		:returns: string
 
-::
+		Returns the IP address for the current user. If the IP address is not
+		valid, the method will return '0.0.0.0'::
 
-	echo $this->input->ip_address();
+			echo $this->input->ip_address();
 
-$this->input->valid_ip($ip)
-===========================
+		.. important:: This method takes into account the ``$config['proxy_ips']``
+			setting and will return the reported HTTP_X_FORWARDED_FOR,
+			HTTP_CLIENT_IP, HTTP_X_CLIENT_IP or HTTP_X_CLUSTER_CLIENT_IP
+			address for the allowed IP addresses.
 
-Takes an IP address as input and returns TRUE or FALSE (boolean) if it
-is valid or not.
+	.. method:: valid_ip($ip[, $which = ''])
 
-.. note:: The $this->input->ip_address() method above automatically
-	validates the IP address.
+		:param string $ip: IP address
+		:param string $which: IP protocol ('ipv4' or 'ipv6')
+		:returns: bool
 
-::
+		Takes an IP address as input and returns TRUE or FALSE (boolean) depending
+		on whether it is valid or not.
 
-	if ( ! $this->input->valid_ip($ip))
-	{
-	     echo 'Not Valid';
-	}
-	else
-	{
-	     echo 'Valid';
-	}
+		.. note:: The $this->input->ip_address() method above automatically
+			validates the IP address.
 
-Accepts an optional second string parameter of 'ipv4' or 'ipv6' to specify
-an IP format. The default checks for both formats.
+		::
 
-$this->input->user_agent()
-==========================
+			if ( ! $this->input->valid_ip($ip))
+			{
+				echo 'Not Valid';
+			}
+			else
+			{
+				echo 'Valid';
+			}
 
-Returns the user agent (web browser) being used by the current user.
-Returns FALSE if it's not available.
+		Accepts an optional second string parameter of 'ipv4' or 'ipv6' to specify
+		an IP format. The default checks for both formats.
 
-::
+	.. method:: user_agent()
 
-	echo $this->input->user_agent();
+		:returns: string
 
-See the :doc:`User Agent Class <user_agent>` for methods which extract
-information from the user agent string.
+		Returns the user agent string (web browser) being used by the current user,
+		or NULL if it's not available.
+		::
 
-$this->input->request_headers()
-===============================
+			echo $this->input->user_agent();
 
-Useful if running in a non-Apache environment where
-`apache_request_headers() <http://php.net/apache_request_headers>`_
-will not be supported. Returns an array of headers.
+		See the :doc:`User Agent Class <user_agent>` for methods which extract
+		information from the user agent string.
 
-::
+	.. method:: request_headers([$xss_clean = FALSE])
 
-	$headers = $this->input->request_headers();
+		:param bool $xss_clean: Whether to apply XSS filtering
+		:returns: array
 
-$this->input->get_request_header()
-==================================
+		Returns an array of HTTP request headers.
+		Useful if running in a non-Apache environment where
+		`apache_request_headers() <http://php.net/apache_request_headers>`_
+		will not be supported.
+		::
 
-Returns a single member of the request headers array.
+			$headers = $this->input->request_headers();
 
-::
+	.. method:: get_request_header($index[, $xss_clean = FALSE])
 
-	$this->input->get_request_header('some-header', TRUE);
+		:param string $index: HTTP request header name
+		:param bool $xss_clean: Whether to apply XSS filtering
+		:returns: string
 
-$this->input->is_ajax_request()
-===============================
+		Returns a single member of the request headers array or NULL
+		if the searched header is not found.
+		::
 
-Checks to see if the HTTP_X_REQUESTED_WITH server header has been
-set, and returns a boolean response.
+			$this->input->get_request_header('some-header', TRUE);
 
-$this->input->is_cli_request()
-==============================
+	.. method:: is_ajax_request()
 
-Checks to see if the STDIN constant is set, which is a failsafe way to
-see if PHP is being run on the command line.
+		:returns: bool
 
-::
+		Checks to see if the HTTP_X_REQUESTED_WITH server header has been
+		set, and returns boolean TRUE if it is or FALSE if not.
 
-	$this->input->is_cli_request()
+	.. method:: is_cli_request()
 
-.. note:: This method is DEPRECATED and is now just an alias for the
-	:php:func:`is_cli()` function.
+		:returns: bool
 
-$this->input->method()
-======================
+		Checks to see if the application was run from the command-line
+		interface.
 
-Returns the $_SERVER['REQUEST_METHOD'], optional set uppercase or lowercase (default lowercase).
+		.. note:: This method checks both the PHP SAPI name currently in use
+			and if the ``STDIN`` constant is defined, which is usually a
+			failsafe way to see if PHP is being run via the command line.
 
-::
+		::
 
-	echo $this->input->method(TRUE); // Outputs: POST
-	echo $this->input->method(FALSE); // Outputs: post
-	echo $this->input->method(); // Outputs: post
\ No newline at end of file
+			$this->input->is_cli_request()
+
+		.. note:: This method is DEPRECATED and is now just an alias for the
+			:func:`is_cli()` function.
+
+	.. method:: method([$upper = FALSE])
+
+		:param bool $upper: Whether to return the request method name in upper or lower case
+		:returns: string
+
+		Returns the ``$_SERVER['REQUEST_METHOD']``, with the option to set it
+		in uppercase or lowercase.
+		::
+
+			echo $this->input->method(TRUE); // Outputs: POST
+			echo $this->input->method(FALSE); // Outputs: post
+			echo $this->input->method(); // Outputs: post
\ No newline at end of file
diff --git a/user_guide_src/source/libraries/language.rst b/user_guide_src/source/libraries/language.rst
index d288cd6..3cee5d7 100644
--- a/user_guide_src/source/libraries/language.rst
+++ b/user_guide_src/source/libraries/language.rst
@@ -19,11 +19,18 @@
 .. note:: Each language should be stored in its own folder. For example,
 	the English files are located at: system/language/english
 
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
 Creating Language Files
 =======================
 
-Language files must be named with **_lang.php** as the file extension. For
-example, let's say you want to create a file containing error messages.
+Language files must be named with **_lang.php** as the filename extension.
+For example, let's say you want to create a file containing error messages.
 You might name it: error_lang.php
 
 Within the file you will assign each line of text to an array called
@@ -79,7 +86,7 @@
 -----------------------------------
 
 This feature has been deprecated from the language library and moved to
-the :php:func:`lang()` function of the :doc:`Language Helper
+the :func:`lang()` function of the :doc:`Language Helper
 <../helpers/language_helper>`.
 
 Auto-loading Languages
@@ -89,4 +96,30 @@
 application, you can tell CodeIgniter to :doc:`auto-load
 <../general/autoloader>` it during system initialization. This is done
 by opening the **application/config/autoload.php** file and adding the
-language(s) to the autoload array.
\ No newline at end of file
+language(s) to the autoload array.
+
+***************
+Class Reference
+***************
+
+.. class:: CI_Lang
+
+	.. method:: load($langfile[, $idiom = ''[, $return = FALSE[, $add_suffix = TRUE[, $alt_path = '']]]])
+
+		:param string $langfile: Language file to load
+		:param string $idiom: Language name (i.e. 'english')
+		:param bool $return: Whether to return the loaded array of translations
+		:param bool $add_suffix: Whether to add the '_lang' suffix to the language file name
+		:param string $alt_path: An alternative path to look in for the language file
+		:returns: void or array if the third parameter is set to TRUE
+
+		Loads a language file.
+
+	.. method:: line($line[, $log_errors = TRUE])
+
+		:param string $line: Language line key name
+		:param bool $log_errors: Whether to log an error if the line isn't found
+		:returns: string or FALSE on failure
+
+		Fetches a single translation line from the already loaded language files,
+		based on the line's name.
\ No newline at end of file
diff --git a/user_guide_src/source/libraries/loader.rst b/user_guide_src/source/libraries/loader.rst
index 91db5af..15d9d80 100644
--- a/user_guide_src/source/libraries/loader.rst
+++ b/user_guide_src/source/libraries/loader.rst
@@ -11,286 +11,12 @@
 .. note:: This class is initialized automatically by the system so there
 	is no need to do it manually.
 
-The following methods are available in this class:
+.. contents::
+  :local:
 
-$this->load->library('class_name', $config, 'object name')
-==========================================================
+.. raw:: html
 
-This method is used to load core classes. Where class_name is the
-name of the class you want to load.
-
-.. note:: We use the terms "class" and "library" interchangeably.
-
-For example, if you would like to send email with CodeIgniter, the first
-step is to load the email class within your controller::
-
-	$this->load->library('email');
-
-Once loaded, the library will be ready for use, using
-$this->email->*some_method*().
-
-Library files can be stored in subdirectories within the main
-"libraries" directory, or within your personal application/libraries
-directory. To load a file located in a subdirectory, simply include the
-path, relative to the "libraries" directory. For example, if you have
-file located at::
-
-	libraries/flavors/Chocolate.php
-
-You will load it using::
-
-	$this->load->library('flavors/chocolate');
-
-You may nest the file in as many subdirectories as you want.
-
-Additionally, multiple libraries can be loaded at the same time by
-passing an array of libraries to the load method.
-
-::
-
-	$this->load->library(array('email', 'table'));
-
-Setting options
----------------
-
-The second (optional) parameter allows you to optionally pass
-configuration setting. You will typically pass these as an array::
-
-	$config = array (
-		'mailtype' => 'html',
-		'charset'  => 'utf-8,
-		'priority' => '1'
-	);
-
-	$this->load->library('email', $config);
-
-Config options can usually also be set via a config file. Each library
-is explained in detail in its own page, so please read the information
-regarding each one you would like to use.
-
-Please take note, when multiple libraries are supplied in an array for
-the first parameter, each will receive the same parameter information.
-
-Assigning a Library to a different object name
-----------------------------------------------
-
-If the third (optional) parameter is blank, the library will usually be
-assigned to an object with the same name as the library. For example, if
-the library is named Calendar, it will be assigned to a variable named
-$this->calendar.
-
-If you prefer to set your own class names you can pass its value to the
-third parameter::
-
-	$this->load->library('calendar', '', 'my_calendar');
-
-	// Calendar class is now accessed using:
-	$this->my_calendar
-
-Please take note, when multiple libraries are supplied in an array for
-the first parameter, this parameter is discarded.
-
-$this->load->driver('parent_name', $config, 'object name')
-==========================================================
-
-This method is used to load driver libraries. Where parent_name is the
-name of the parent class you want to load.
-
-As an example, if you would like to use sessions with CodeIgniter, the first
-step is to load the session driver within your controller::
-
-	$this->load->driver('session');
-
-Once loaded, the library will be ready for use, using
-$this->session->*some_method*().
-
-Driver files must be stored in a subdirectory within the main
-"libraries" directory, or within your personal application/libraries
-directory. The subdirectory must match the parent class name. Read the
-:doc:`Drivers <../general/drivers>` description for details.
-
-Additionally, multiple driver libraries can be loaded at the same time by
-passing an array of drivers to the load method.
-
-::
-
-	$this->load->driver(array('session', 'cache'));
-
-Setting options
----------------
-
-The second (optional) parameter allows you to optionally pass
-configuration settings. You will typically pass these as an array::
-
-	$config = array(
-		'sess_driver' => 'cookie',
-		'sess_encrypt_cookie'  => true,
-		'encryption_key' => 'mysecretkey'
-	);
-
-	$this->load->driver('session', $config);
-
-Config options can usually also be set via a config file. Each library
-is explained in detail in its own page, so please read the information
-regarding each one you would like to use.
-
-Assigning a Driver to a different object name
----------------------------------------------
-
-If the third (optional) parameter is blank, the library will be assigned
-to an object with the same name as the parent class. For example, if
-the library is named Session, it will be assigned to a variable named
-``$this->session``.
-
-If you prefer to set your own class names you can pass its value to the
-third parameter::
-
-	$this->load->library('session', '', 'my_session');
-
-	// Session class is now accessed using:
-	$this->my_session
-
-.. note:: Driver libraries may also be loaded with the ``library()`` method,
-	but it is faster to use ``driver()``.
-
-$this->load->view('file_name', $data, TRUE/FALSE)
-=================================================
-
-This method is used to load your View files. If you haven't read the
-:doc:`Views <../general/views>` section of the user guide it is
-recommended that you do since it shows you how this method is
-typically used.
-
-The first parameter is required. It is the name of the view file you
-would like to load.
-
-.. note:: The .php file extension does not need to be specified unless
-	you use something other than .php.
-
-The second **optional** parameter can take an associative array or an
-object as input, which it runs through the PHP
-`extract() <http://www.php.net/extract>`_ function to convert to variables
-that can be used in your view files. Again, read the
-:doc:`Views <../general/views>` page to learn how this might be useful.
-
-The third **optional** parameter lets you change the behavior of the
-method so that it returns data as a string rather than sending it to
-your browser. This can be useful if you want to process the data in some
-way. If you set the parameter to true (boolean) it will return data. The
-default behavior is false, which sends it to your browser. Remember to
-assign it to a variable if you want the data returned::
-
-	$string = $this->load->view('myfile', '', true);
-
-$this->load->model('model_name');
-==================================
-
-::
-
-	$this->load->model('model_name');
-
-
-If your model is located in a subdirectory, include the relative path
-from your models directory. For example, if you have a model located at
-application/models/blog/Queries.php you'll load it using::
-
-	$this->load->model('blog/queries');
-
-If you would like your model assigned to a different object name you can
-specify it via the second parameter of the loading method::
-
-	$this->load->model('model_name', 'fubar');
-	$this->fubar->method();
-
-$this->load->database('options', TRUE/FALSE)
-============================================
-
-This method lets you load the database class. The two parameters are
-**optional**. Please see the :doc:`database <../database/index>`
-section for more info.
-
-$this->load->vars($array)
-=========================
-
-This method takes an associative array as input and generates
-variables using the PHP `extract <http://www.php.net/extract>`_
-method. This method produces the same result as using the second
-parameter of the ``$this->load->view()`` method above. The reason you
-might want to use this method independently is if you would like to
-set some global variables in the constructor of your controller and have
-them become available in any view file loaded from any method. You can
-have multiple calls to this method. The data get cached and merged
-into one array for conversion to variables.
-
-$this->load->get_var($key)
-==========================
-
-This method checks the associative array of variables available to
-your views. This is useful if for any reason a var is set in a library
-or another controller method using ``$this->load->vars()``.
-
-$this->load->get_vars()
-=======================
-
-This method retrieves all variables available to your views.
-
-$this->load->clear_vars()
-=========================
-
-Clears cached view variables.
-
-$this->load->helper('file_name')
-================================
-
-This method loads helper files, where file_name is the name of the
-file, without the _helper.php extension.
-
-$this->load->file('filepath/filename', TRUE/FALSE)
-==================================================
-
-This is a generic file loading method. Supply the filepath and name in
-the first parameter and it will open and read the file. By default the
-data is sent to your browser, just like a View file, but if you set the
-second parameter to true (boolean) it will instead return the data as a
-string.
-
-$this->load->language('file_name')
-==================================
-
-This method is an alias of the :doc:`language loading
-method <language>`: ``$this->lang->load()``
-
-$this->load->config('file_name')
-================================
-
-This method is an alias of the :doc:`config file loading
-method <config>`: ``$this->config->load()``
-
-$this->load->is_loaded('library_name')
-======================================
-
-The ``is_loaded()`` method allows you to check if a class has already
-been loaded or not.
-
-.. note:: The word "class" here refers to libraries and drivers.
-
-If the requested class has been loaded, the method returns its assigned
-name in the CI Super-object and FALSE if it's not::
-
-	$this->load->library('form_validation');
-	$this->load->is_loaded('Form_validation');	// returns 'form_validation'
-
-	$this->load->is_loaded('Nonexistent_library');	// returns FALSE
-
-.. important:: If you have more than one instance of a class (assigned to
-	different properties), then the first one will be returned.
-
-::
-
-	$this->load->library('form_validation', $config, 'fv');
-	$this->load->library('form_validation');
-
-	$this->load->is_loaded('Form_validation');	// returns 'fv'
+  <div class="custom-index container"></div>
 
 Application "Packages"
 ======================
@@ -299,10 +25,7 @@
 of resources in a single directory, complete with its own libraries,
 models, helpers, config, and language files. It is recommended that
 these packages be placed in the application/third_party directory. Below
-is a sample map of an package directory
-
-Sample Package "Foo Bar" Directory Map
-======================================
+is a sample map of an package directory.
 
 The following is an example of a directory for an application package
 named "Foo Bar".
@@ -321,47 +44,19 @@
 own config files, helpers, language files, libraries, and models. To use
 these resources in your controllers, you first need to tell the Loader
 that you are going to be loading resources from a package, by adding the
-package path.
-
-$this->load->add_package_path()
----------------------------------
-
-Adding a package path instructs the Loader class to prepend a given path
-for subsequent requests for resources. As an example, the "Foo Bar"
-application package above has a library named Foo_bar.php. In our
-controller, we'd do the following::
-
-	$this->load->add_package_path(APPPATH.'third_party/foo_bar/');
-	$this->load->library('foo_bar');
-
-$this->load->remove_package_path()
-------------------------------------
-
-When your controller is finished using resources from an application
-package, and particularly if you have other application packages you
-want to work with, you may wish to remove the package path so the Loader
-no longer looks in that directory for resources. To remove the last path
-added, simply call the method with no parameters.
-
-$this->load->remove_package_path()
-------------------------------------
-
-Or to remove a specific package path, specify the same path previously
-given to add_package_path() for a package.::
-
-	$this->load->remove_package_path(APPPATH.'third_party/foo_bar/');
+package path via the ``add_package_path()`` method.
 
 Package view files
 ------------------
 
-By Default, package view files paths are set when add_package_path()
+By Default, package view files paths are set when ``add_package_path()``
 is called. View paths are looped through, and once a match is
 encountered that view is loaded.
 
 In this instance, it is possible for view naming collisions within
 packages to occur, and possibly the incorrect package being loaded. To
 ensure against this, set an optional second parameter of FALSE when
-calling add_package_path().
+calling ``add_package_path()``.
 
 ::
 
@@ -375,4 +70,372 @@
 	// Again without the second parameter:
 	$this->load->add_package_path(APPPATH.'my_app');
 	$this->load->view('my_app_index'); // Loads
-	$this->load->view('welcome_message'); // Loads
\ No newline at end of file
+	$this->load->view('welcome_message'); // Loads
+
+***************
+Class Reference
+***************
+
+.. class:: CI_Loader
+
+	.. method:: library($library[, $params = NULL[, $object_name = NULL]])
+
+		:param mixed $library: Library name as a string or an array with multiple libraries
+		:param array $params: Optional array of parameters to pass to the loaded library's constructor
+		:param string $object_name: Optional object name to assign the library to
+		:returns: object
+
+		This method is used to load core classes.
+
+		.. note:: We use the terms "class" and "library" interchangeably.
+
+		For example, if you would like to send email with CodeIgniter, the first
+		step is to load the email class within your controller::
+
+			$this->load->library('email');
+
+		Once loaded, the library will be ready for use, using ``$this->email``.
+
+		Library files can be stored in subdirectories within the main
+		"libraries" directory, or within your personal *application/libraries*
+		directory. To load a file located in a subdirectory, simply include the
+		path, relative to the "libraries" directory. For example, if you have
+		file located at::
+
+			libraries/flavors/Chocolate.php
+
+		You will load it using::
+
+			$this->load->library('flavors/chocolate');
+
+		You may nest the file in as many subdirectories as you want.
+
+		Additionally, multiple libraries can be loaded at the same time by
+		passing an array of libraries to the load method.
+		::
+
+			$this->load->library(array('email', 'table'));
+
+		**Setting options**
+
+		The second (optional) parameter allows you to optionally pass
+		configuration setting. You will typically pass these as an array::
+
+			$config = array (
+				'mailtype' => 'html',
+				'charset'  => 'utf-8,
+				'priority' => '1'
+			);
+
+			$this->load->library('email', $config);
+
+		Config options can usually also be set via a config file. Each library
+		is explained in detail in its own page, so please read the information
+		regarding each one you would like to use.
+
+		Please take note, when multiple libraries are supplied in an array for
+		the first parameter, each will receive the same parameter information.
+
+		**Assigning a Library to a different object name**
+
+		If the third (optional) parameter is blank, the library will usually be
+		assigned to an object with the same name as the library. For example, if
+		the library is named Calendar, it will be assigned to a variable named
+		``$this->calendar``.
+
+		If you prefer to set your own class names you can pass its value to the
+		third parameter::
+
+			$this->load->library('calendar', NULL, 'my_calendar');
+
+			// Calendar class is now accessed using:
+			$this->my_calendar
+
+		Please take note, when multiple libraries are supplied in an array for
+		the first parameter, this parameter is discarded.
+
+	.. method:: driver($library[, $params = NULL[, $object_name]])
+
+		:param mixed $library: Library name as a string or an array with multiple libraries
+		:param array $params: Optional array of parameters to pass to the loaded library's constructor
+		:param string $object_name: Optional object name to assign the library to
+		:returns: object
+
+		This method is used to load driver libraries, acts very much like the
+		``library()`` method.
+
+		As an example, if you would like to use sessions with CodeIgniter, the first
+		step is to load the session driver within your controller::
+
+			$this->load->driver('session');
+
+		Once loaded, the library will be ready for use, using ``$this->session``.
+
+		Driver files must be stored in a subdirectory within the main
+		"libraries" directory, or within your personal *application/libraries*
+		directory. The subdirectory must match the parent class name. Read the
+		:doc:`Drivers <../general/drivers>` description for details.
+
+		Additionally, multiple driver libraries can be loaded at the same time by
+		passing an array of drivers to the load method.
+		::
+
+			$this->load->driver(array('session', 'cache'));
+
+		**Setting options**
+
+		The second (optional) parameter allows you to optionally pass
+		configuration settings. You will typically pass these as an array::
+
+			$config = array(
+				'sess_driver' => 'cookie',
+				'sess_encrypt_cookie'  => true,
+				'encryption_key' => 'mysecretkey'
+			);
+
+			$this->load->driver('session', $config);
+
+		Config options can usually also be set via a config file. Each library
+		is explained in detail in its own page, so please read the information
+		regarding each one you would like to use.
+
+		**Assigning a Driver to a different object name**
+
+		If the third (optional) parameter is blank, the library will be assigned
+		to an object with the same name as the parent class. For example, if
+		the library is named Session, it will be assigned to a variable named
+		``$this->session``.
+
+		If you prefer to set your own class names you can pass its value to the
+		third parameter::
+
+			$this->load->library('session', '', 'my_session');
+
+			// Session class is now accessed using:
+			$this->my_session
+
+	.. method:: view($view[, $vars = array()[, return = FALSE]])
+
+		:param string $view: View name
+		:param array $vars: An associative array of variables
+		:param bool $return: Whether to return the loaded view
+		:returns: mixed
+
+		This method is used to load your View files. If you haven't read the
+		:doc:`Views <../general/views>` section of the user guide it is
+		recommended that you do since it shows you how this method is
+		typically used.
+
+		The first parameter is required. It is the name of the view file you
+		would like to load.
+
+		.. note:: The .php file extension does not need to be specified unless
+			you use something other than .php.
+
+		The second **optional** parameter can take an associative array or an
+		object as input, which it runs through the PHP
+		`extract() <http://www.php.net/extract>`_ function to convert to variables
+		that can be used in your view files. Again, read the
+		:doc:`Views <../general/views>` page to learn how this might be useful.
+
+		The third **optional** parameter lets you change the behavior of the
+		method so that it returns data as a string rather than sending it to
+		your browser. This can be useful if you want to process the data in some
+		way. If you set the parameter to TRUE (boolean) it will return data. The
+		default behavior is FALSE, which sends it to your browser. Remember to
+		assign it to a variable if you want the data returned::
+
+			$string = $this->load->view('myfile', '', TRUE);
+
+	.. method:: vars($vars[, $val = ''])
+
+		:param mixed $vars: An array of variables or a single variable name
+		:param mixed $val: Optional variable value
+		:returns: object
+
+		This method takes an associative array as input and generates
+		variables using the PHP `extract() <http://www.php.net/extract>`_
+		function. This method produces the same result as using the second
+		parameter of the ``$this->load->view()`` method above. The reason you
+		might want to use this method independently is if you would like to
+		set some global variables in the constructor of your controller and have
+		them become available in any view file loaded from any method. You can
+		have multiple calls to this method. The data get cached and merged
+		into one array for conversion to variables.
+
+	.. method:: get_var($key)
+
+		:param string $key: Variable name key
+		:returns: mixed
+
+		This method checks the associative array of variables available to
+		your views. This is useful if for any reason a var is set in a library
+		or another controller method using ``$this->load->vars()``.
+
+	.. method:: get_vars()
+
+		:returns: array
+
+		This method retrieves all variables available to your views.
+
+	.. method:: clear_vars()
+
+		:returns: object
+
+		Clears cached view variables.
+
+	.. method:: model($model[, $name = ''[, $db_conn = FALSE]])
+
+		:param mixed $model: Model name or an array containing multiple models
+		:param string $name: Optional object name to assign the model to
+		:param string $db_conn: Optional database configuration group to load
+		:returns: object
+
+		::
+
+			$this->load->model('model_name');
+
+
+		If your model is located in a subdirectory, include the relative path
+		from your models directory. For example, if you have a model located at
+		*application/models/blog/Queries.php* you'll load it using::
+
+			$this->load->model('blog/queries');
+
+		If you would like your model assigned to a different object name you can
+		specify it via the second parameter of the loading method::
+
+			$this->load->model('model_name', 'fubar');
+			$this->fubar->method();
+
+	.. method:: database([$params = ''[, $return = FALSE[, $query_builder = NULL]]])
+
+		:param mixed $params: Database group name or configuration options
+		:param bool $return: Whether to return the loaded database object
+		:param bool $query_builder: Whether to load the Query Builder
+		:returns: mixed
+
+		This method lets you load the database class. The two parameters are
+		**optional**. Please see the :doc:`database <../database/index>`
+		section for more info.
+
+	.. method:: dbforge([$db = NULL[, $return = FALSE]])
+
+		:param object $db: Database object
+		:param bool $return: Whether to return the Database Forge instance
+		:returns: mixed
+
+		Loads the :doc:`Database Forge <../database/forge>` class, please refer
+		to that manual for more info.
+
+	.. method:: dbutil([$db = NULL[, $return = FALSE]])
+
+		:param object $db: Database object
+		:param bool $return: Whether to return the Database Utilities instance
+		:returns: mixed
+
+		Loads the :doc:`Database Utilities <../database/utilities>` class, please
+		refer to that manual for more info.
+
+	.. method:: helper($helpers)
+
+		:param mixed $helpers: Helper name as a string or an array containing multiple helpers
+		:returns: object
+
+		This method loads helper files, where file_name is the name of the
+		file, without the _helper.php extension.
+
+	.. method:: file($path[, $return = FALSE])
+
+		:param string $path: File path
+		:param bool $return: Whether to return the loaded file
+		:returns: mixed
+
+		This is a generic file loading method. Supply the filepath and name in
+		the first parameter and it will open and read the file. By default the
+		data is sent to your browser, just like a View file, but if you set the
+		second parameter to boolean TRUE it will instead return the data as a
+		string.
+
+	.. method:: language($files[, $lang = ''])
+
+		:param mixed $files: Language file name or an array of multiple language files
+		:param string $lang: Language name
+		:returns: object
+
+		This method is an alias of the :doc:`language loading
+		method <language>`: ``$this->lang->load()``.
+
+	.. method:: config($file[, $use_sections = FALSE[, $fail_gracefully = FALSE]])
+
+		:param string $file: Configuration file name
+		:param bool $use_sections: Whether configuration values should be loaded into their own section
+		:param bool $fail_gracefully: Whether to just return FALSE in case of failure
+		:returns: bool
+
+		This method is an alias of the :doc:`config file loading
+		method <config>`: ``$this->config->load()``
+
+	.. method:: is_loaded($class)
+
+		:param string $class: Class name
+		:returns: mixed
+
+		Allows you to check if a class has already been loaded or not.
+
+		.. note:: The word "class" here refers to libraries and drivers.
+
+		If the requested class has been loaded, the method returns its assigned
+		name in the CI Super-object and FALSE if it's not::
+
+			$this->load->library('form_validation');
+			$this->load->is_loaded('Form_validation');	// returns 'form_validation'
+
+			$this->load->is_loaded('Nonexistent_library');	// returns FALSE
+
+		.. important:: If you have more than one instance of a class (assigned to
+			different properties), then the first one will be returned.
+
+		::
+
+			$this->load->library('form_validation', $config, 'fv');
+			$this->load->library('form_validation');
+
+			$this->load->is_loaded('Form_validation');	// returns 'fv'
+
+	.. method:: add_package_path($path[, $view_cascade = TRUE])
+
+		:param string $path: Path to add
+		:param bool $view_cascade: Whether to use cascading views
+		:returns: object
+
+		Adding a package path instructs the Loader class to prepend a given path
+		for subsequent requests for resources. As an example, the "Foo Bar"
+		application package above has a library named Foo_bar.php. In our
+		controller, we'd do the following::
+
+			$this->load->add_package_path(APPPATH.'third_party/foo_bar/')
+				->library('foo_bar');
+
+	.. method:: remove_package_path([$path = ''])
+
+		:param string $path: Path to remove
+		:returns: object
+
+		When your controller is finished using resources from an application
+		package, and particularly if you have other application packages you
+		want to work with, you may wish to remove the package path so the Loader
+		no longer looks in that directory for resources. To remove the last path
+		added, simply call the method with no parameters.
+
+		Or to remove a specific package path, specify the same path previously
+		given to ``add_package_path()`` for a package.::
+
+			$this->load->remove_package_path(APPPATH.'third_party/foo_bar/');
+
+	.. method:: get_package_paths([$include_base = TRUE])
+
+		:param bool $include_base: Whether to include BASEPATH
+		:returns: array
+
+		Returns all currently available package paths.
\ No newline at end of file
diff --git a/user_guide_src/source/libraries/migration.rst b/user_guide_src/source/libraries/migration.rst
index 9dc3c08..4143609 100644
--- a/user_guide_src/source/libraries/migration.rst
+++ b/user_guide_src/source/libraries/migration.rst
@@ -10,8 +10,15 @@
 
 The database table **migration** tracks which migrations have already been 
 run so all you have to do is update your application files and 
-call **$this->migration->current()** to work out which migrations should be run. 
-The current version is found in **config/migration.php**.
+call ``$this->migration->current()`` to work out which migrations should be run. 
+The current version is found in **application/config/migration.php**.
+
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
 
 ********************
 Migration file names
@@ -28,23 +35,24 @@
   helps prevent numbering conflicts when working in a team environment, and is
   the preferred scheme in CodeIgniter 3.0 and later.
 
-The desired style may be selected using the **$config['migration_type']**
-setting in your **migration.php** config file.
+The desired style may be selected using the ``$config['migration_type']``
+setting in your *application/config/migration.php* file.
 
 Regardless of which numbering style you choose to use, prefix your migration
 files with the migration number followed by an underscore and a descriptive
 name for the migration. For example:
 
-* **001_add_blog.php** (sequential numbering)
-* **20121031100537_add_blog.php** (timestamp numbering)
+* 001_add_blog.php (sequential numbering)
+* 20121031100537_add_blog.php (timestamp numbering)
 
 ******************
 Create a Migration
 ******************
 	
 This will be the first migration for a new site which has a blog. All 
-migrations go in the folder **application/migrations/** and have names such 
-as **20121031100537_add_blog.php**.::
+migrations go in the **application/migrations/** directory and have names such 
+as *20121031100537_add_blog.php*.
+::
 
 	<?php
 
@@ -80,7 +88,7 @@
 		}
 	}
 
-Then in **application/config/migration.php** set **$config['migration_version'] = 1;**.
+Then in **application/config/migration.php** set ``$config['migration_version'] = 1;``.
 
 *************
 Usage Example
@@ -93,55 +101,19 @@
 	
 	class Migrate extends CI_Controller
 	{
-	    public function index()
-	    {
-	    	$this->load->library('migration');
-	    	
-	    	if ($this->migration->current() === FALSE)
-	    	{
-	    		show_error($this->migration->error_string());
-	    	}
-	    }
+
+		public function index()
+		{
+			$this->load->library('migration');
+
+			if ($this->migration->current() === FALSE)
+			{
+				show_error($this->migration->error_string());
+			}
+		}
+
 	}
 
-******************
-Function Reference
-******************
-
-$this->migration->current()
-============================
-
-The current migration is whatever is set for **$config['migration_version']** in 
-**application/config/migration.php**.
-
-$this->migration->error_string()
-=================================
-
-This returns a string of errors while performing a migration.
-
-$this->migration->find_migrations()
-====================================
-
-An array of migration filenames are returned that are found in the **migration_path** 
-property.
-
-$this->migration->latest()
-===========================
-
-This works much the same way as current() but instead of looking for 
-the **$config['migration_version']** the Migration class will use the very 
-newest migration found in the filesystem.
-
-$this->migration->version()
-============================
-
-Version can be used to roll back changes or step forwards programmatically to 
-specific versions. It works just like current but ignores **$config['migration_version']**.::
-
-	$this->load->library('migration');
-
-	$this->migration->version(5);
-
 *********************
 Migration Preferences
 *********************
@@ -161,3 +133,46 @@
 **migration_type**         'timestamp'            'timestamp' / 'sequential' The type of numeric identifier used to name
                                                                              migration files.
 ========================== ====================== ========================== =============================================
+
+***************
+Class Reference
+***************
+
+.. class:: CI_Migration
+
+	.. method:: current()
+
+		:returns: mixed
+
+		Migrates up to the current version (whatever is set for ``$config['migration_version']`` in *application/config/migration.php*).
+
+	.. method:: error_string()
+
+		:returns: string
+
+		This returns a string of errors that were detected while performing a migration.
+
+	.. method:: find_migrations()
+
+		:returns: array
+
+		An array of migration filenames are returned that are found in the **migration_path** property.
+
+	.. method:: latest()
+
+		:returns: mixed
+
+		This works much the same way as ``current()`` but instead of looking for 
+		the ``$config['migration_version']`` the Migration class will use the very 
+		newest migration found in the filesystem.
+
+	.. method:: version($target_version)
+
+		:param mixed $target_version: Migration version to process
+		:returns: mixed
+
+		Version can be used to roll back changes or step forwards programmatically to 
+		specific versions. It works just like ``current()`` but ignores ``$config['migration_version']``.
+		::
+
+			$this->migration->version(5);
diff --git a/user_guide_src/source/libraries/output.rst b/user_guide_src/source/libraries/output.rst
index a3d67b8..76197bd 100644
--- a/user_guide_src/source/libraries/output.rst
+++ b/user_guide_src/source/libraries/output.rst
@@ -2,7 +2,7 @@
 Output Class
 ############
 
-The Output class is a small class with one main function: To send the
+The Output class is a core class with one main function: To send the
 finalized web page to the requesting browser. It is also responsible for
 :doc:`caching <../general/caching>` your web pages, if you use that
 feature.
@@ -16,159 +16,182 @@
 it's automatically passed to the Output class, which will be called
 automatically by CodeIgniter at the end of system execution. It is
 possible, however, for you to manually intervene with the output if you
-need to, using either of the two following functions:
+need to.
 
-$this->output->set_output();
-=============================
+.. contents::
+  :local:
 
-Permits you to manually set the final output string. Usage example::
+.. raw:: html
 
-	$this->output->set_output($data);
+  <div class="custom-index container"></div>
 
-.. important:: If you do set your output manually, it must be the last
-	thing done in the function you call it from. For example, if you build a
-	page in one of your controller functions, don't set the output until the
-	end.
+***************
+Class Reference
+***************
 
-$this->output->set_content_type();
-====================================
+.. class:: CI_Output
 
-Permits you to set the mime-type of your page so you can serve JSON
-data, JPEG's, XML, etc easily.
+	.. attribute:: $parse_exec_vars = TRUE;
 
-::
+		Enables/disables parsing of the {elapsed_time} and {memory_usage} pseudo-variables.
 
-	$this->output
-	    ->set_content_type('application/json')
-	    ->set_output(json_encode(array('foo' => 'bar')));
+		CodeIgniter will parse those tokens in your output by default. To disable this, set
+		this property to FALSE in your controller.
+		::
 
-	$this->output
-	    ->set_content_type('jpeg') // You could also use ".jpeg" which will have the full stop removed before looking in config/mimes.php
-	    ->set_output(file_get_contents('files/something.jpg'));
+			$this->output->parse_exec_vars = FALSE;
 
-.. important:: Make sure any non-mime string you pass to this method
-	exists in config/mimes.php or it will have no effect.
+	.. method:: set_output($output)
 
-You can also set the character set of the document, by passing a second argument::
+		:param string $output: String to set the output to
+		:returns: object
 
-	$this->output->set_content_type('css', 'utf-8');
+		Permits you to manually set the final output string. Usage example::
 
-$this->output->get_content_type()
-=================================
+			$this->output->set_output($data);
 
-Returns the Content-Type HTTP header that's currently in use,
-excluding the character set value.
+		.. important:: If you do set your output manually, it must be the last thing done
+			in the function you call it from. For example, if you build a page in one
+			of your controller functions, don't set the output until the end.
 
-	$mime = $this->output->get_content_type();
+	.. method:: set_content_type($mime_type[, $charset = NULL])
 
-.. note:: If not set, the default return value is 'text/html'.
+		:param string $mime_type: MIME Type idenitifer string
+		:param string $charset: Character set
+		:returns: object
 
-$this->output->get_header()
-===========================
+		Permits you to set the mime-type of your page so you can serve JSON data, JPEG's, XML, etc easily.
+		::
 
-Gets the requested HTTP header value, if set.
+			$this->output
+				->set_content_type('application/json')
+				->set_output(json_encode(array('foo' => 'bar')));
 
-If the header is not set, NULL will be returned.
-If an empty value is passed to the method, it will return FALSE.
+			$this->output
+				->set_content_type('jpeg') // You could also use ".jpeg" which will have the full stop removed before looking in config/mimes.php
+				->set_output(file_get_contents('files/something.jpg'));
 
-Example::
+		.. important:: Make sure any non-mime string you pass to this method
+			exists in *application/config/mimes.php* or it will have no effect.
 
-	$this->output->set_content_type('text/plain', 'UTF-8');
-	echo $this->output->get_header('content-type');
-	// Outputs: text/plain; charset=utf-8
+		You can also set the character set of the document, by passing a second argument::
 
-.. note:: The header name is compared in a case-insensitive manner.
+			$this->output->set_content_type('css', 'utf-8');
 
-.. note:: Raw headers sent via PHP's native ``header()`` function are
-	also detected.
+	.. method:: get_content_type()
 
-$this->output->get_output()
-===========================
+		:returns: string
 
-Permits you to manually retrieve any output that has been sent for
-storage in the output class. Usage example::
+		Returns the Content-Type HTTP header that's currently in use, excluding the character set value.
+		::
 
-	$string = $this->output->get_output();
+			$mime = $this->output->get_content_type();
 
-Note that data will only be retrievable from this function if it has
-been previously sent to the output class by one of the CodeIgniter
-functions like $this->load->view().
+		.. note:: If not set, the default return value is 'text/html'.
 
-$this->output->append_output();
-================================
+	.. method:: get_header($header)
 
-Appends data onto the output string. Usage example::
+		:param string $header: HTTP header name
+		:returns: string
 
-	$this->output->append_output($data);
+		Returns the requested HTTP header value, or NULL if the requested header is not set.
+		Example::
 
-$this->output->set_header();
-=============================
+			$this->output->set_content_type('text/plain', 'UTF-8');
+			echo $this->output->get_header('content-type');
+			// Outputs: text/plain; charset=utf-8
 
-Permits you to manually set server headers, which the output class will
-send for you when outputting the final rendered display. Example::
+		.. note:: The header name is compared in a case-insensitive manner.
 
-	$this->output->set_header("HTTP/1.0 200 OK");
-	$this->output->set_header("HTTP/1.1 200 OK");
-	$this->output->set_header('Last-Modified: '.gmdate('D, d M Y H:i:s', $last_update).' GMT');
-	$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate");
-	$this->output->set_header("Cache-Control: post-check=0, pre-check=0");
-	$this->output->set_header("Pragma: no-cache");
+		.. note:: Raw headers sent via PHP's native ``header()`` function are also detected.
 
-$this->output->set_status_header(code, 'text');
-=================================================
+	.. method:: get_output()
 
-Permits you to manually set a server status header. Example::
+		:returns: string
 
-	$this->output->set_status_header('401');
-	// Sets the header as:  Unauthorized
+		Permits you to manually retrieve any output that has been sent for
+		storage in the output class. Usage example::
 
-`See here <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html>`_ for
-a full list of headers.
+			$string = $this->output->get_output();
 
-.. note:: This method is an alias for :doc:`Common function <../general/common_functions>`
-	``set_status_header()``.
+		Note that data will only be retrievable from this function if it has
+		been previously sent to the output class by one of the CodeIgniter
+		functions like ``$this->load->view()``.
 
-$this->output->enable_profiler();
-==================================
+	.. method:: append_output($output)
 
-Permits you to enable/disable the
-:doc:`Profiler <../general/profiling>`, which will display benchmark
-and other data at the bottom of your pages for debugging and
-optimization purposes.
+		:param string $output: Additional output data to append
+		:returns: object
 
-To enable the profiler place the following function anywhere within your
-:doc:`Controller <../general/controllers>` functions::
+		Appends data onto the output string.
+		::
 
-	$this->output->enable_profiler(TRUE);
+			$this->output->append_output($data);
 
-When enabled a report will be generated and inserted at the bottom of
-your pages.
+	.. method:: set_header($header[, $replace = TRUE])
 
-To disable the profiler you will use::
+		:param string $header: HTTP Header
+		:param bool $replace: Whether to replace the old header value, if it is already set
+		:returns: object
 
-	$this->output->enable_profiler(FALSE);
+		Permits you to manually set server headers, which the output class will
+		send for you when outputting the final rendered display. Example::
 
-$this->output->set_profiler_sections();
-=========================================
+			$this->output->set_header('HTTP/1.0 200 OK');
+			$this->output->set_header('HTTP/1.1 200 OK');
+			$this->output->set_header('Last-Modified: '.gmdate('D, d M Y H:i:s', $last_update).' GMT');
+			$this->output->set_header('Cache-Control: no-store, no-cache, must-revalidate');
+			$this->output->set_header('Cache-Control: post-check=0, pre-check=0');
+			$this->output->set_header('Pragma: no-cache');
 
-Permits you to enable/disable specific sections of the Profiler when
-enabled. Please refer to the :doc:`Profiler <../general/profiling>`
-documentation for further information.
+	.. method:: set_status_header([$code = 200[, $text = '']])
 
-$this->output->cache();
-=======================
+		:param int $code: HTTP status code
+		:param string $text: Optional message
+		:returns: object
 
-The CodeIgniter output library also controls caching. For more
-information, please see the :doc:`caching
-documentation <../general/caching>`.
+		Permits you to manually set a server status header. Example::
 
-Parsing Execution Variables
-===========================
+			$this->output->set_status_header('401');
+			// Sets the header as:  Unauthorized
 
-CodeIgniter will parse the pseudo-variables {elapsed_time} and
-{memory_usage} in your output by default. To disable this, set the
-$parse_exec_vars class property to FALSE in your controller.
-::
+		`See here <http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html>`_ for a full list of headers.
 
-	$this->output->parse_exec_vars = FALSE;
+		.. note:: This method is an alias for :doc:`Common function <../general/common_functions>`
+			:func:`set_status_header()`.
 
+	.. method:: enable_profiler([$val = TRUE])
+
+		:param bool $val: Whether to enable or disable the Profiler
+		:returns: object
+
+		Permits you to enable/disable the :doc:`Profiler <../general/profiling>`, which will display benchmark
+		and other data at the bottom of your pages for debugging and optimization purposes.
+
+		To enable the profiler place the following line anywhere within your
+		:doc:`Controller <../general/controllers>` methods::
+
+			$this->output->enable_profiler(TRUE);
+
+		When enabled a report will be generated and inserted at the bottom of your pages.
+
+		To disable the profiler you would use::
+
+			$this->output->enable_profiler(FALSE);
+
+	.. method:: set_profiler_sections($sections)
+
+		:param array $sections: Profiler sections
+		:returns: object
+
+		Permits you to enable/disable specific sections of the Profiler when it is enabled.
+		Please refer to the :doc:`Profiler <../general/profiling>` documentation for further information.
+
+	.. method:: cache($time)
+
+		:param int $time: Cache expiration time in seconds
+		:returns: object
+
+		Caches the current page for the specified amount of seconds.
+
+		For more information, please see the :doc:`caching documentation <../general/caching>`.
\ No newline at end of file
diff --git a/user_guide_src/source/libraries/pagination.rst b/user_guide_src/source/libraries/pagination.rst
index d9d3f50..34ca221 100644
--- a/user_guide_src/source/libraries/pagination.rst
+++ b/user_guide_src/source/libraries/pagination.rst
@@ -5,6 +5,13 @@
 CodeIgniter's Pagination class is very easy to use, and it is 100%
 customizable, either dynamically or via stored preferences.
 
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
 If you are not familiar with the term "pagination", it refers to links
 that allows you to navigate from page to page, like this::
 
@@ -15,7 +22,7 @@
 *******
 
 Here is a simple example showing how to create pagination in one of your
-:doc:`controller <../general/controllers>` functions::
+:doc:`controller <../general/controllers>` methods::
 
 	$this->load->library('pagination');
 
@@ -30,8 +37,8 @@
 Notes
 =====
 
-The $config array contains your configuration variables. It is passed to
-the $this->pagination->initialize function as shown above. Although
+The ``$config`` array contains your configuration variables. It is passed to
+the ``$this->pagination->initialize()`` method as shown above. Although
 there are some twenty items you can configure, at minimum you need the
 three shown. Here is a description of what those items represent:
 
@@ -46,7 +53,7 @@
 -  **per_page** The number of items you intend to show per page. In the
    above example, you would be showing 20 items per page.
 
-The create_links() function returns an empty string when there is no
+The ``create_links()`` method returns an empty string when there is no
 pagination to show.
 
 Setting preferences in a config file
@@ -54,9 +61,9 @@
 
 If you prefer not to set preferences using the above method, you can
 instead put them into a config file. Simply create a new file called
-pagination.php, add the $config array in that file. Then save the file
-in: config/pagination.php and it will be used automatically. You will
-NOT need to use the $this->pagination->initialize function if you save
+pagination.php, add the ``$config`` array in that file. Then save the file
+in *application/config/pagination.php* and it will be used automatically.
+You will NOT need to use ``$this->pagination->initialize()`` if you save
 your preferences in a config file.
 
 **************************
@@ -67,14 +74,14 @@
 initialization function to tailor the display.
 
 $config['uri_segment'] = 3;
-============================
+===========================
 
 The pagination function automatically determines which segment of your
 URI contains the page number. If you need something different you can
 specify it.
 
 $config['num_links'] = 2;
-==========================
+=========================
 
 The number of "digit" links you would like before and after the selected
 page number. For example, the number 2 will place two digits on either
@@ -92,25 +99,19 @@
 
 By default, the pagination library assume you are using :doc:`URI
 Segments <../general/urls>`, and constructs your links something
-like
-
-::
+like::
 
 	http://example.com/index.php/test/page/20
 
-
-If you have $config['enable_query_strings'] set to TRUE your links
+If you have ``$config['enable_query_strings']`` set to TRUE your links
 will automatically be re-written using Query Strings. This option can
-also be explictly set. Using $config['page_query_string'] set to TRUE,
-the pagination link will become.
-
-::
+also be explictly set. Using ``$config['page_query_string']`` set to TRUE,
+the pagination link will become::
 
 	http://example.com/index.php?c=test&m=page&per_page=20
 
-
 Note that "per_page" is the default query string passed, however can be
-configured using $config['query_string_segment'] = 'your_string'
+configured using ``$config['query_string_segment'] = 'your_string'``
 
 $config['reuse_query_string'] = FALSE;
 ======================================
@@ -118,9 +119,7 @@
 By default your Query String arguments (nothing to do with other
 query string options) will be ignored. Setting this config to
 TRUE will add existing query string arguments back into the
-URL after the URI segment and before the suffix
-
-::
+URL after the URI segment and before the suffix.::
 
 	http://example.com/index.php/test/page/20?query=search%term
 
@@ -128,13 +127,13 @@
 as well as query string arguments, which until 3.0 was not possible.
 
 $config['prefix'] = '';
-==================================
+=======================
 
 A custom prefix added to the path. The prefix value will be right before
 the offset segment.
 
 $config['suffix'] = '';
-==================================
+=======================
 
 A custom suffix added to the path. The sufix value will be right after
 the offset segment.
@@ -144,15 +143,15 @@
 ***********************
 
 If you would like to surround the entire pagination with some markup you
-can do it with these two prefs:
+can do it with these two preferences:
 
 $config['full_tag_open'] = '<p>';
-===================================
+=================================
 
 The opening tag placed on the left side of the entire result.
 
 $config['full_tag_close'] = '</p>';
-=====================================
+===================================
 
 The closing tag placed on the right side of the entire result.
 
@@ -161,18 +160,18 @@
 **************************
 
 $config['first_link'] = 'First';
-=================================
+================================
 
 The text you would like shown in the "first" link on the left. If you do
 not want this link rendered, you can set its value to FALSE.
 
 $config['first_tag_open'] = '<div>';
-======================================
+====================================
 
 The opening tag for the "first" link.
 
 $config['first_tag_close'] = '</div>';
-========================================
+======================================
 
 The closing tag for the "first" link.
 
@@ -181,18 +180,18 @@
 *************************
 
 $config['last_link'] = 'Last';
-===============================
+==============================
 
 The text you would like shown in the "last" link on the right. If you do
 not want this link rendered, you can set its value to FALSE.
 
 $config['last_tag_open'] = '<div>';
-=====================================
+===================================
 
 The opening tag for the "last" link.
 
 $config['last_tag_close'] = '</div>';
-=======================================
+=====================================
 
 The closing tag for the "last" link.
 
@@ -201,18 +200,18 @@
 ***************************
 
 $config['next_link'] = '&gt;';
-===============================
+==============================
 
 The text you would like shown in the "next" page link. If you do not
 want this link rendered, you can set its value to FALSE.
 
 $config['next_tag_open'] = '<div>';
-=====================================
+===================================
 
 The opening tag for the "next" link.
 
 $config['next_tag_close'] = '</div>';
-=======================================
+=====================================
 
 The closing tag for the "next" link.
 
@@ -221,18 +220,18 @@
 *******************************
 
 $config['prev_link'] = '&lt;';
-===============================
+==============================
 
 The text you would like shown in the "previous" page link. If you do not
 want this link rendered, you can set its value to FALSE.
 
 $config['prev_tag_open'] = '<div>';
-=====================================
+===================================
 
 The opening tag for the "previous" link.
 
 $config['prev_tag_close'] = '</div>';
-=======================================
+=====================================
 
 The closing tag for the "previous" link.
 
@@ -241,12 +240,12 @@
 ***********************************
 
 $config['cur_tag_open'] = '<b>';
-==================================
+================================
 
 The opening tag for the "current" link.
 
 $config['cur_tag_close'] = '</b>';
-====================================
+==================================
 
 The closing tag for the "current" link.
 
@@ -255,12 +254,12 @@
 ****************************
 
 $config['num_tag_open'] = '<div>';
-====================================
+==================================
 
 The opening tag for the "digit" link.
 
 $config['num_tag_close'] = '</div>';
-======================================
+====================================
 
 The closing tag for the "digit" link.
 
@@ -280,9 +279,7 @@
 
 If you want to add an extra attribute to be added to every link rendered
 by the pagination class, you can set them as key/value pairs in the
-"attributes" config
-
-::
+"attributes" config::
 
 	// Produces: class="myclass"
 	$config['attributes'] = array('class' => 'myclass');
@@ -300,4 +297,23 @@
 
 ::
 
-	$config['attributes']['rel'] = FALSE;
\ No newline at end of file
+	$config['attributes']['rel'] = FALSE;
+
+***************
+Class Reference
+***************
+
+.. class:: CI_Pagination
+
+	.. method:: initialize([$params = array()])
+
+		:param array $params: Configuration parameters
+		:returns: void
+
+		Initializes the Pagination class with your preferred options.
+
+	.. method:: create_links()
+
+		:returns: string
+
+		Returns a "pagination" bar, containing the generated links or an empty string if there's just a single page.
\ No newline at end of file
diff --git a/user_guide_src/source/libraries/parser.rst b/user_guide_src/source/libraries/parser.rst
index 0b77ae4..50bde82 100644
--- a/user_guide_src/source/libraries/parser.rst
+++ b/user_guide_src/source/libraries/parser.rst
@@ -35,6 +35,13 @@
 	template parsing solution. We've kept it very lean on purpose in order
 	to maintain maximum performance.
 
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
 Initializing the Class
 ======================
 
@@ -46,15 +53,10 @@
 Once loaded, the Parser library object will be available using:
 $this->parser
 
-The following functions are available in this library:
+Parsing templates
+=================
 
-$this->parser->parse()
-======================
-
-This method accepts a template name and data array as input, and it
-generates a parsed version. Example::
-
-	$this->load->library('parser');
+You can use the ``parse()`` method to parse (or render) simple templates, like this::
 
 	$data = array(
 	            'blog_title' => 'My Blog Title',
@@ -77,12 +79,6 @@
 
 	$string = $this->parser->parse('blog_template', $data, TRUE);
 
-$this->parser->parse_string()
-==============================
-
-This method works exactly like parse(), only accepts a string as the
-first parameter in place of a view file.
-
 Variable Pairs
 ==============
 
@@ -147,3 +143,35 @@
 
 	$this->parser->parse('blog_template', $data);
 
+***************
+Class Reference
+***************
+
+.. class: CI_Parser
+
+	.. method:: parse($template, $data[, $return = FALSE])
+
+		:param string $template: Path to view file
+		:param array $data: Variable data
+		:param bool $return: Whether to return the parsed template
+		:returns: mixed
+
+		Parses a template from the provided path and variables.
+
+	.. method:: parse_string($template, $data[, $return = FALSE])
+
+		:param string $template: Path to view file
+		:param array $data: Variable data
+		:param bool $return: Whether to return the parsed template
+		:returns: mixed
+
+		This method works exactly like ``parse()``, only it accepts the template as a
+		string instead of loading a view file.
+
+	.. method:: set_delimiters([$l = '{'[, $r = '}']])
+
+		:param string $l: Left delimiter
+		:param string $r: Right delimiter
+		:returns: void
+
+		Sets the delimiters (opening and closing) for a value "tag" in a template.
\ No newline at end of file
diff --git a/user_guide_src/source/libraries/security.rst b/user_guide_src/source/libraries/security.rst
index be1f8d2..451fadf 100644
--- a/user_guide_src/source/libraries/security.rst
+++ b/user_guide_src/source/libraries/security.rst
@@ -5,6 +5,13 @@
 The Security Class contains methods that help you create a secure
 application, processing input data for security.
 
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
 XSS Filtering
 =============
 
@@ -23,12 +30,7 @@
 submission. It's not something that should be used for general runtime
 processing since it requires a fair amount of processing overhead.
 
-To filter data through the XSS filter use this function:
-
-$this->security->xss_clean()
-============================
-
-Here is an usage example::
+To filter data through the XSS filter use the ``xss_clean()`` method::
 
 	$data = $this->security->xss_clean($data);
 
@@ -38,10 +40,10 @@
 
 	$config['global_xss_filtering'] = TRUE;
 
-Note: If you use the form validation class, it gives you the option of
-XSS filtering as well.
+.. note:: If you use the form validation class, it gives you the option of
+	XSS filtering as well.
 
-An optional second parameter, is_image, allows this function to be used
+An optional second parameter, *is_image*, allows this function to be used
 to test images for potential XSS attacks, useful for file upload
 security. When this second parameter is set to TRUE, instead of
 returning an altered string, the function returns TRUE if the image is
@@ -52,40 +54,21 @@
 
 	if ($this->security->xss_clean($file, TRUE) === FALSE)
 	{
-	    // file failed the XSS test
+		// file failed the XSS test
 	}
 
-$this->security->sanitize_filename()
-====================================
-
-When accepting filenames from user input, it is best to sanitize them to
-prevent directory traversal and other security related issues. To do so,
-use the sanitize_filename() method of the Security class. Here is an
-example::
-
-	$filename = $this->security->sanitize_filename($this->input->post('filename'));
-
-If it is acceptable for the user input to include relative paths, e.g.
-file/in/some/approved/folder.txt, you can set the second optional
-parameter, $relative_path to TRUE.
-
-::
-
-	$filename = $this->security->sanitize_filename($this->input->post('filename'), TRUE);
-
 Cross-site request forgery (CSRF)
 =================================
 
-You can enable CSRF protection by opening your
-application/config/config.php file and setting this::
+You can enable CSRF protection by altering your **application/config/config.php**
+file in the following way::
 
 	$config['csrf_protection'] = TRUE;
 
 If you use the :doc:`form helper <../helpers/form_helper>`, then
-``form_open()`` will automatically insert a hidden csrf field in
+:func:`form_open()` will automatically insert a hidden csrf field in
 your forms. If not, then you can use ``get_csrf_token_name()``
 and ``get_csrf_hash()``
-
 ::
 
 	$csrf = array(
@@ -114,15 +97,57 @@
 
 	$config['csrf_exclude_uris'] = array('api/person/add');
 
-$this->security->get_csrf_token_name()
-======================================
+***************
+Class Reference
+***************
 
-Returns the CSRF token name, which is set by
-``$config['csrf_token_name']``.
+.. class:: CI_Security
 
-$this->security->get_csrf_hash()
-================================
+	.. method:: xss_clean($str[, $is_image = FALSE])
 
-Returns the CSRF hash value. Useful in combination with
-``get_csrf_token_name()`` for manually building forms or 
-sending valid AJAX POST requests.
\ No newline at end of file
+		:param string $str: Input string
+		:returns: mixed
+
+		Tries to remove XSS exploits from the input data and returns the cleaned string.
+		If the optional second parameter is set to true, it will return boolean TRUE if the image is safe to use and FALSE if malicious data was detected in it.
+
+	.. method:: sanitize_filename($str[, $relative_path = FALSE])
+
+		:param string $str: File name/path
+		:param bool $relative_path: Whether to preserve any directories in the file path
+		:returns: string
+
+		Tries to sanitize filenames in order to prevent directory traversal attempts
+		and other security threats, which is particularly useful for files that were supplied via user input.
+		::
+
+			$filename = $this->security->sanitize_filename($this->input->post('filename'));
+
+		If it is acceptable for the user input to include relative paths, e.g.
+		*file/in/some/approved/folder.txt*, you can set the second optional parameter, ``$relative_path`` to TRUE.
+		::
+
+			$filename = $this->security->sanitize_filename($this->input->post('filename'), TRUE);
+
+	.. method:: get_csrf_token_name()
+
+		:returns: string
+
+		Returns the CSRF token name (the ``$config['csrf_token_name']`` value).
+
+	.. method:: get_csrf_hash()
+
+		:returns: string
+
+		Returns the CSRF hash value. Useful in combination with ``get_csrf_token_name()``
+		for manually building forms or sending valid AJAX POST requests.
+
+	.. method:: entity_decode($str[, $charset = NULL])
+
+		:param string $str: Input string
+		:param string $charset: Character set of the input string
+
+		This method acts a lot like PHP's own native ``html_entity_decode()`` function in ENT_COMPAT mode, only
+		it tries to detect HTML entities that don't end in a semicolon because some browsers allow that.
+
+		If the ``$charset`` parameter is left empty, then your configured ``$config['charset']`` value will be used.
diff --git a/user_guide_src/source/libraries/sessions.rst b/user_guide_src/source/libraries/sessions.rst
index 2f8bea0..3e6dcf2 100644
--- a/user_guide_src/source/libraries/sessions.rst
+++ b/user_guide_src/source/libraries/sessions.rst
@@ -9,6 +9,13 @@
 you may create your own `Custom Drivers`_ to store session data however
 you wish, while still taking advantage of the features of the Session class.
 
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
 Initializing a Session
 ======================
 
@@ -21,12 +28,13 @@
 sessions.
 
 To initialize the Session class manually in your controller constructor,
-use the $this->load->driver function::
+use the ``$this->load->driver`` function::
 
 	$this->load->driver('session');
 
-Once loaded, the Sessions library object will be available using:
-$this->session
+Once loaded, the Sessions library object will be available using::
+
+	$this->session
 
 How do Sessions work?
 =====================
@@ -62,10 +70,10 @@
 
 	[array]
 	(
-	     'session_id'    => random hash,
-	     'ip_address'    => 'string - user IP address',
-	     'user_agent'    => 'string - user agent data',
-	     'last_activity' => timestamp
+		'session_id'    => random hash,
+		'ip_address'    => 'string - user IP address',
+		'user_agent'    => 'string - user agent data',
+		'last_activity' => timestamp
 	)
 
 .. note:: Sessions are only updated every five minutes by default to
@@ -112,21 +120,21 @@
 example::
 
 	$newdata = array(
-	                   'username'  => 'johndoe',
-	                   'email'     => 'johndoe@some-site.com',
-	                   'logged_in' => TRUE
-	               );
+		'username'  => 'johndoe',
+		'email'     => 'johndoe@some-site.com',
+		'logged_in' => TRUE
+	);
 
 	$this->session->set_userdata($newdata);
 
-If you want to add userdata one value at a time, set_userdata() also
+If you want to add userdata one value at a time, ``set_userdata()`` also
 supports this syntax.
 
 ::
 
 	$this->session->set_userdata('some_name', 'some_value');
 
-If you want to verify that a userdata value exists, call has_userdata().
+If you want to verify that a userdata value exists, call ``has_userdata()``.
 
 ::
 
@@ -143,10 +151,10 @@
 
 	Array
 	(
-	    [session_id] => 4a5a5dca22728fb0a84364eeb405b601
-	    [ip_address] => 127.0.0.1
-	    [user_agent] => Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7;
-	    [last_activity] => 1303142623
+		[session_id] => 4a5a5dca22728fb0a84364eeb405b601
+		[ip_address] => 127.0.0.1
+		[user_agent] => Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7;
+		[last_activity] => 1303142623
 	)
 
 Removing Session Data
@@ -185,8 +193,8 @@
 	$this->session->set_flashdata('item', 'value');
 
 
-You can also pass an array to set_flashdata(), in the same manner as
-set_userdata().
+You can also pass an array to ``set_flashdata()``, in the same manner as
+``set_userdata()``.
 
 To read a flashdata variable::
 
@@ -198,7 +206,7 @@
 
 
 If you find that you need to preserve a flashdata variable through an
-additional request, you can do so using the keep_flashdata() function.
+additional request, you can do so using the ``keep_flashdata()`` function.
 You can either pass a single item or an array of flashdata items to keep.
 
 ::
@@ -206,6 +214,8 @@
 	$this->session->keep_flashdata('item');
 	$this->session->keep_flashdata(array('item1', 'item2', 'item3'));
 
+.. note:: The function will return NULL if the item cannot be found.
+
 Tempdata
 ========
 
@@ -219,7 +229,7 @@
 
 	$this->session->set_tempdata('item', 'value', $expire);
 
-You can also pass an array to set_tempdata()::
+You can also pass an array to ``set_tempdata()``::
 
 	$tempdata = array('newuser' => TRUE, 'message' => 'Thanks for joining!');
 
@@ -233,7 +243,7 @@
 	$this->session->tempdata('item');
 
 If you need to remove a tempdata value before it expires,
-use unset_tempdata()::
+use ``unset_tempdata()``::
 
 	$this->session->unset_tempdata('item');
 
@@ -246,7 +256,7 @@
 
 .. note:: This function should be the last one called, and even flash
 	variables will no longer be available. If you only want some items
-	destroyed and not all, use unset_userdata().
+	destroyed and not all, use ``unset_userdata()``.
 
 Session Preferences
 ===================
@@ -304,7 +314,7 @@
 Typically, only one driver will be used at a time, but CodeIgniter does
 support loading multiple drivers. If a specific valid driver is called, it
 will be automatically loaded. Or, an additional driver may be explicitly
-loaded by calling load_driver()::
+loaded by ``calling load_driver()``::
 
 	$this->session->load_driver('native');
 
@@ -329,7 +339,7 @@
 sets of values, regardless of key names.
 
 A specific driver may also be explicitly selected for use by pursuant
-methods with the select_driver() call::
+methods with the ``select_driver()`` call::
 
 	$this->session->select_driver('native');
 
@@ -391,11 +401,24 @@
 		KEY `last_activity_idx` (`last_activity`)
 	);
 
+Or if you're using PostgreSQL::
+
+	CREATE TABLE  ci_sessions (
+		session_id varchar(40) DEFAULT '0' NOT NULL,
+		ip_address varchar(45) DEFAULT '0' NOT NULL,
+		user_agent varchar(120) NOT NULL,
+		last_activity bigint DEFAULT 0 NOT NULL,
+		user_data text NOT NULL,
+		PRIMARY KEY (session_id)
+	);
+
+	CREATE INDEX last_activity_idx ON ci_sessions(last_activity);
+
 .. note:: By default the table is called ci_sessions, but you can name
 	it anything you want as long as you update the
-	application/config/config.php file so that it contains the name you have
-	chosen. Once you have created your database table you can enable the
-	database option in your config.php file as follows::
+	*application/config/config.php* file so that it contains the name
+	you have chosen. Once you have created your database table you
+	can enable the database option in your config.php file as follows::
 
 		$config['sess_use_database'] = TRUE;
 
@@ -423,7 +446,7 @@
 session drivers. A session driver basically manages an array of name/value
 pairs with some sort of storage mechanism.
 
-To make a new driver, extend CI_Session_driver. Overload the initialize()
+To make a new driver, extend CI_Session_driver. Overload the ``initialize()``
 method and read or create session data. Then implement a save handler to
 write changed data to storage (sess_save), a destroy handler to remove
 deleted data (sess_destroy), a regenerate handler to make a new session ID
@@ -431,6 +454,7 @@
 Your initial class might look like::
 
 	class CI_Session_custom extends CI_Session_driver {
+
 		protected function initialize()
 		{
 			// Read existing session data or create a new one
@@ -455,15 +479,16 @@
 		{
 			// Return a reference to your userdata array
 		}
+
 	}
 
-Notice that get_userdata() returns a reference so the parent library is
+Notice that ``get_userdata()`` returns a reference so the parent library is
 accessing the same array the driver object is using. This saves memory
 and avoids synchronization issues during usage.
 
 Put your driver in the libraries/Session/drivers folder anywhere in your
 package paths. This includes the application directory, the system directory,
-or any path you add with $CI->load->add_package_path(). Your driver must be
+or any path you add with ``$CI->load->add_package_path()``. Your driver must be
 named CI_Session_<name>, and your filename must be Session_<name>.php,
 preferably also capitalized, such as::
 
@@ -484,3 +509,169 @@
 your config.php file to an array including your driver name::
 
 	$config['sess_valid_drivers'] = array('sess_driver');
+
+***************
+Class Reference
+***************
+
+.. class:: CI_Session
+
+	.. method:: load_driver($driver)
+
+		:param string $driver: Driver name
+		:returns: object
+
+		Loads a session storage driver
+
+	.. method:: select_driver($driver)
+
+		:param string $driver: Driver name
+		:returns: void
+
+		Selects default session storage driver.
+
+	.. method:: sess_destroy()
+
+		Destroys current session
+
+		.. note:: This method should be the last one called, and even flash
+			variables will no longer be available after it is used.
+			If you only want some items destroyed and not all, use
+			``unset_userdata()``.
+
+	.. method:: sess_regenerate([$destroy = FALSE])
+
+		:param bool $destroy: Whether to destroy session data
+		:returns: void
+
+		Regenerate the current session data.
+
+	.. method:: userdata($item)
+
+		:param string $item: Session item name
+		:returns: string
+
+		Returns a string containing the value of the passed item or NULL if the item is not found.
+		Example::
+
+			$this->session->userdata('user');
+			//returns example@example.com considering the set_userdata example.
+
+	.. method:: all_userdata()
+
+		:returns: array
+
+		Retruns an array with all of the session userdata items.
+
+	.. method:: all_flashdata()
+
+		:returns: array
+
+		Retruns an array with all of the session flashdata items.
+
+	.. method:: set_userdata($newdata[, $newval = ''])
+
+		:param mixed $newdata: Item name or array of items
+		:param mixed $newval: Item value or empty string (not required if $newdata is array)
+		:returns: void
+
+		Sets items into session example usages::
+
+			$this->session->set_userdata('user', 'example@example.com');
+			// adds item user with value example@example.com to the session
+
+			$this->session->set_userdata(array('user'=>'example@example.com'));
+			// does the same as the above example - adds item user with value example@example.com to the session
+
+	.. method:: unset_userdata($item)
+
+		:param mixed $item: Item name or an array containing multiple items
+		:returns: void
+
+		Unsets previously set items from the session. Example::
+
+			$this->session->unset_userdata('user');
+			//unsets 'user' from session data.
+
+			$this->session->unset_userdata(array('user', 'useremail'));
+			//unsets both 'user' and 'useremail' from the session data.
+
+	.. method:: has_userdata($item)
+
+		:param string $item: Item name
+		:returns: bool
+
+		Checks if an item exists in the session.
+
+	.. method:: set_flashdata($newdata[, $newval = ''])
+
+		:param mixed $newdata: Item name or an array of items
+		:param mixed $newval: Item value or empty string (not required if $newdata is array)
+		:returns: void
+
+		Sets items into session flashdata example usages::
+
+			$this->session->set_flashdata('message', 'Test message.');
+			// adds item 'message' with value 'Test message.' to the session flashdata
+
+			$this->session->set_flashdata(array('message'=>'Test message.'));
+			// does the same as the above example - adds item 'message' with value 'Test message.'
+			 to the session flashdata
+
+	.. method:: keep_flashdata($item)
+
+		:param mixed $item: Item name or an array containing multiple flashdata items
+		:returns: void
+
+		Keeps items into flashdata for one more request.
+
+	.. method:: flashdata($item)
+
+		:param string $item: Flashdata item name
+		:returns: string
+
+		Returns a string containing the value of the passed item or NULL if the item is not found.
+		Example::
+
+			$this->session->flashdata('message');
+			//returns 'Test message.' considering the set_flashdata example.
+
+	.. method:: set_tempdata($newdata[, $newval = ''[, $expire = 0]])
+
+		:param mixed $newdata: Item name or array containing multiple items
+		:param string $newval: Item value or empty string (not required if $newdata is array)
+		:param int $expire: Lifetime in seconds (0 for default)
+		:returns: void
+
+		Sets items into session tempdata example::
+
+			$this->session->set_tempdata('message', 'Test message.', '60');
+			// adds item 'message' with value 'Test message.' to the session tempdata for 60 seconds
+
+			$this->session->set_tempdata(array('message'=>'Test message.'));
+			// does the same as the above example - adds item 'message' with value 'Test message.' 
+			to the session tempdata for the default value of
+
+	.. method:: unset_tempdata($item)
+
+		:param mixed $item: Item name or an array containing multiple items
+		:returns: void
+
+		Unsets previously set items from tempdata. Example::
+
+			$this->session->unset_tempdata('user');
+			//unsets 'user' from tempdata.
+
+			$this->session->unset_tempdata(array('user', 'useremail'));
+			//unsets both 'user' and 'useremail' from the tempdata.
+
+	.. method:: tempdata($item)
+
+		:param string $item: Tempdata item name
+		:returns: string
+
+		Returns a string containing the value of the passed item or NULL if the item is not found.
+		Example::
+
+			$this->session->tempdata('message');
+			//returns 'Test message.' considering the set_tempdata example.
diff --git a/user_guide_src/source/libraries/table.rst b/user_guide_src/source/libraries/table.rst
index 6a808ab..ed085f7 100644
--- a/user_guide_src/source/libraries/table.rst
+++ b/user_guide_src/source/libraries/table.rst
@@ -5,48 +5,60 @@
 The Table Class provides functions that enable you to auto-generate HTML
 tables from arrays or database result sets.
 
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
+*********************
+Using the Table Class
+*********************
+
 Initializing the Class
 ======================
 
 Like most other classes in CodeIgniter, the Table class is initialized
-in your controller using the $this->load->library function::
+in your controller using the ``$this->load->library()`` method::
 
 	$this->load->library('table');
 
-Once loaded, the Table library object will be available using:
-$this->table
+Once loaded, the Table library object will be available using::
+
+	$this->table
 
 Examples
 ========
 
 Here is an example showing how you can create a table from a
 multi-dimensional array. Note that the first array index will become the
-table heading (or you can set your own headings using the set_heading()
-function described in the function reference below).
+table heading (or you can set your own headings using the ``set_heading()``
+method described in the function reference below).
 
 ::
 
 	$this->load->library('table');
 
 	$data = array(
-	             array('Name', 'Color', 'Size'),
-	             array('Fred', 'Blue', 'Small'),
-	             array('Mary', 'Red', 'Large'),
-	             array('John', 'Green', 'Medium')	
-	             );
+		array('Name', 'Color', 'Size'),
+		array('Fred', 'Blue', 'Small'),
+		array('Mary', 'Red', 'Large'),
+		array('John', 'Green', 'Medium')	
+	);
 
 	echo $this->table->generate($data);
 
 Here is an example of a table created from a database query result. The
 table class will automatically generate the headings based on the table
-names (or you can set your own headings using the set_heading()
-function described in the function reference below).
+names (or you can set your own headings using the ``set_heading()``
+method described in the class reference below).
 
 ::
 
 	$this->load->library('table');
 
-	$query = $this->db->query("SELECT * FROM my_table");
+	$query = $this->db->query('SELECT * FROM my_table');
 
 	echo $this->table->generate($query);
 
@@ -82,28 +94,28 @@
 The Table Class permits you to set a table template with which you can
 specify the design of your layout. Here is the template prototype::
 
-	$tmpl = array (
-	                    'table_open'          => '<table border="0" cellpadding="4" cellspacing="0">',
+	$template = array(
+		'table_open'          => '<table border="0" cellpadding="4" cellspacing="0">',
 
-	                    'heading_row_start'   => '<tr>',
-	                    'heading_row_end'     => '</tr>',
-	                    'heading_cell_start'  => '<th>',
-	                    'heading_cell_end'    => '</th>',
+		'heading_row_start'   => '<tr>',
+		'heading_row_end'     => '</tr>',
+		'heading_cell_start'  => '<th>',
+		'heading_cell_end'    => '</th>',
 
-	                    'row_start'           => '<tr>',
-	                    'row_end'             => '</tr>',
-	                    'cell_start'          => '<td>',
-	                    'cell_end'            => '</td>',
+		'row_start'           => '<tr>',
+		'row_end'             => '</tr>',
+		'cell_start'          => '<td>',
+		'cell_end'            => '</td>',
 
-	                    'row_alt_start'       => '<tr>',
-	                    'row_alt_end'         => '</tr>',
-	                    'cell_alt_start'      => '<td>',
-	                    'cell_alt_end'        => '</td>',
+		'row_alt_start'       => '<tr>',
+		'row_alt_end'         => '</tr>',
+		'cell_alt_start'      => '<td>',
+		'cell_alt_end'        => '</td>',
 
-	                    'table_close'         => '</table>'
-	              );
+		'table_close'         => '</table>'
+	);
 
-	$this->table->set_template($tmpl);
+	$this->table->set_template($template);
 
 .. note:: You'll notice there are two sets of "row" blocks in the
 	template. These permit you to create alternating row colors or design
@@ -113,157 +125,159 @@
 change parts of the layout you can simply submit those elements. In this
 example, only the table opening tag is being changed::
 
-	$tmpl = array ( 'table_open'  => '<table border="1" cellpadding="2" cellspacing="1" class="mytable">' );
+	$template = array(
+		'table_open' => '<table border="1" cellpadding="2" cellspacing="1" class="mytable">'
+	);
 
-	$this->table->set_template($tmpl);
+	$this->table->set_template($template);
 	
 You can also set defaults for these in a config file.
 
-******************
-Function Reference
-******************
+***************
+Class Reference
+***************
 
-$this->table->generate()
-========================
+.. class:: CI_Table
 
-Returns a string containing the generated table. Accepts an optional
-parameter which can be an array or a database result object.
+	.. attribute:: $function = FALSE
 
-$this->table->set_caption()
-============================
+		Allows you to specify a native PHP function or a valid function array object to be applied to all cell data.
+		::
 
-Permits you to add a caption to the table.
+			$this->load->library('table');
 
-::
+			$this->table->set_heading('Name', 'Color', 'Size');
+			$this->table->add_row('Fred', '<strong>Blue</strong>', 'Small');
 
-	$this->table->set_caption('Colors');
+			$this->table->function = 'htmlspecialchars';
+			echo $this->table->generate();
 
-$this->table->set_heading()
-============================
+		In the above example, all cell data would be ran through PHP's :php:func:`htmlspecialchars()` function, resulting in::
 
-Permits you to set the table heading. You can submit an array or
-discrete params::
+			<td>Fred</td><td>&lt;strong&gt;Blue&lt;/strong&gt;</td><td>Small</td>
 
-	$this->table->set_heading('Name', 'Color', 'Size');
+	.. method:: generate([$table_data = NULL])
 
-::
+		:param mixed $table_data: data to populate the table rows with
+		:returns: string
 
-	$this->table->set_heading(array('Name', 'Color', 'Size'));
+		Returns a string containing the generated table. Accepts an optional parameter which can be an array or a database result object.
 
-$this->table->add_row()
-========================
+	.. method:: set_caption($caption)
 
-Permits you to add a row to your table. You can submit an array or
-discrete params::
+		:param string $caption: table caption
+		:returns: void
 
-	$this->table->add_row('Blue', 'Red', 'Green');
+		Permits you to add a caption to the table.
+		::
 
-::
+			$this->table->set_caption('Colors');
 
-	$this->table->add_row(array('Blue', 'Red', 'Green'));
+	.. method:: set_heading([$args = array()[, ...]])
 
-If you would like to set an individual cell's tag attributes, you can
-use an associative array for that cell. The associative key 'data'
-defines the cell's data. Any other key => val pairs are added as
-key='val' attributes to the tag::
+		:param mixed $args: an array or multiple strings containing the table column titles
+		:returns: void
 
-	$cell = array('data' => 'Blue', 'class' => 'highlight', 'colspan' => 2);
-	$this->table->add_row($cell, 'Red', 'Green');
+		Permits you to set the table heading. You can submit an array or discrete params::
 
-	// generates
-	// <td class='highlight' colspan='2'>Blue</td><td>Red</td><td>Green</td>
+			$this->table->set_heading('Name', 'Color', 'Size');
 
-$this->table->make_columns()
-=============================
+			$this->table->set_heading(array('Name', 'Color', 'Size'));
 
-This function takes a one-dimensional array as input and creates a
-multi-dimensional array with a depth equal to the number of columns
-desired. This allows a single array with many elements to be displayed
-in a table that has a fixed column count. Consider this example::
+	.. method:: add_row([$args = array()[, ...]])
 
-	$list = array('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve');
+		:param mixed $args: an array or multiple strings containing the row values
+		:returns: void
 
-	$new_list = $this->table->make_columns($list, 3);
+		Permits you to add a row to your table. You can submit an array or discrete params::
 
-	$this->table->generate($new_list);
+			$this->table->add_row('Blue', 'Red', 'Green');
 
-	// Generates a table with this prototype
+			$this->table->add_row(array('Blue', 'Red', 'Green'));
 
-	<table border="0" cellpadding="4" cellspacing="0">
-	<tr>
-	<td>one</td><td>two</td><td>three</td>
-	</tr><tr>
-	<td>four</td><td>five</td><td>six</td>
-	</tr><tr>
-	<td>seven</td><td>eight</td><td>nine</td>
-	</tr><tr>
-	<td>ten</td><td>eleven</td><td>twelve</td></tr>
-	</table>
+		If you would like to set an individual cell's tag attributes, you can use an associative array for that cell.
+		The associative key **data** defines the cell's data. Any other key => val pairs are added as key='val' attributes to the tag::
 
-$this->table->set_template()
-=============================
+			$cell = array('data' => 'Blue', 'class' => 'highlight', 'colspan' => 2);
+			$this->table->add_row($cell, 'Red', 'Green');
 
-Permits you to set your template. You can submit a full or partial
-template.
+			// generates
+			// <td class='highlight' colspan='2'>Blue</td><td>Red</td><td>Green</td>
 
-::
+	.. method:: make_columns([$array = array()[, $col_limit = 0]])
 
-	$tmpl = array ( 'table_open'  => '<table border="1" cellpadding="2" cellspacing="1" class="mytable">' );
+		:param array $array: an array containing multiple rows' data
+		:param int $col_limit: count of columns in the table
+		:returns: array
 
-	$this->table->set_template($tmpl);
+		This method takes a one-dimensional array as input and creates a multi-dimensional array with a depth equal to the number of columns desired.
+		This allows a single array with many elements to be displayed in a table that has a fixed column count. Consider this example::
 
-$this->table->set_empty()
-==========================
+			$list = array('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve');
 
-Let's you set a default value for use in any table cells that are empty.
-You might, for example, set a non-breaking space::
+			$new_list = $this->table->make_columns($list, 3);
 
-	 $this->table->set_empty("&nbsp;");
+			$this->table->generate($new_list);
 
-$this->table->clear()
-=====================
+			// Generates a table with this prototype
 
-Lets you clear the table heading and row data. If you need to show
-multiple tables with different data you should to call this function
-after each table has been generated to empty the previous table
-information. Example::
+			<table border="0" cellpadding="4" cellspacing="0">
+			<tr>
+			<td>one</td><td>two</td><td>three</td>
+			</tr><tr>
+			<td>four</td><td>five</td><td>six</td>
+			</tr><tr>
+			<td>seven</td><td>eight</td><td>nine</td>
+			</tr><tr>
+			<td>ten</td><td>eleven</td><td>twelve</td></tr>
+			</table>
 
-	$this->load->library('table');
 
-	$this->table->set_heading('Name', 'Color', 'Size');
-	$this->table->add_row('Fred', 'Blue', 'Small');
-	$this->table->add_row('Mary', 'Red', 'Large');
-	$this->table->add_row('John', 'Green', 'Medium');
+	.. method:: set_template($template)
 
-	echo $this->table->generate();
+		:param array $template: associative array containing template values
+		:returns: bool
 
-	$this->table->clear();
+		Permits you to set your template. You can submit a full or partial template.
+		::
 
-	$this->table->set_heading('Name', 'Day', 'Delivery');
-	$this->table->add_row('Fred', 'Wednesday', 'Express');
-	$this->table->add_row('Mary', 'Monday', 'Air');
-	$this->table->add_row('John', 'Saturday', 'Overnight');
+			$template = array(
+				'table_open'  => '<table border="1" cellpadding="2" cellspacing="1" class="mytable">'
+			);
+		
+			$this->table->set_template($template);
 
-	echo $this->table->generate();
+	.. method:: set_empty($value)
 
-$this->table->function
-======================
+		:param mixed $value: value to put in empty cells
+		:returns: void
 
-Allows you to specify a native PHP function or a valid function array
-object to be applied to all cell data.
+		Lets you set a default value for use in any table cells that are empty.
+		You might, for example, set a non-breaking space::
 
-::
+			$this->table->set_empty("&nbsp;");
 
-	$this->load->library('table');
+	.. method:: clear()
 
-	$this->table->set_heading('Name', 'Color', 'Size');
-	$this->table->add_row('Fred', '<strong>Blue</strong>', 'Small');
+		:returns: void
 
-	$this->table->function = 'htmlspecialchars';
-	echo $this->table->generate();
+		Lets you clear the table heading and row data. If you need to show multiple tables with different data you should to call this method
+		after each table has been generated to clear the previous table information. Example::
 
-In the above example, all cell data would be ran through PHP's
-htmlspecialchars() function, resulting in::
+			$this->load->library('table');
 
-	<td>Fred</td><td>&lt;strong&gt;Blue&lt;/strong&gt;</td><td>Small</td>
+			$this->table->set_heading('Name', 'Color', 'Size');
+			$this->table->add_row('Fred', 'Blue', 'Small');
+			$this->table->add_row('Mary', 'Red', 'Large');
+			$this->table->add_row('John', 'Green', 'Medium');
 
+			echo $this->table->generate();
+
+			$this->table->clear();
+
+			$this->table->set_heading('Name', 'Day', 'Delivery');
+			$this->table->add_row('Fred', 'Wednesday', 'Express');
+			$this->table->add_row('Mary', 'Monday', 'Air');
+			$this->table->add_row('John', 'Saturday', 'Overnight');
+
+			echo $this->table->generate();
\ No newline at end of file
diff --git a/user_guide_src/source/libraries/trackback.rst b/user_guide_src/source/libraries/trackback.rst
index f9e0df8..c5b01a2 100644
--- a/user_guide_src/source/libraries/trackback.rst
+++ b/user_guide_src/source/libraries/trackback.rst
@@ -8,16 +8,28 @@
 If you are not familiar with Trackbacks you'll find more information
 `here <http://en.wikipedia.org/wiki/Trackback>`_.
 
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
+*************************
+Using the Trackback Class
+*************************
+
 Initializing the Class
 ======================
 
 Like most other classes in CodeIgniter, the Trackback class is
-initialized in your controller using the $this->load->library function::
+initialized in your controller using the ``$this->load->library()`` method::
 
 	$this->load->library('trackback');
 
-Once loaded, the Trackback library object will be available using:
-$this->trackback
+Once loaded, the Trackback library object will be available using::
+
+	$this->trackback
 
 Sending Trackbacks
 ==================
@@ -28,38 +40,37 @@
 	$this->load->library('trackback');
 
 	$tb_data = array(
-	                'ping_url'  => 'http://example.com/trackback/456',
-	                'url'       => 'http://www.my-example.com/blog/entry/123',
-	                'title'     => 'The Title of My Entry',
-	                'excerpt'   => 'The entry content.',
-	                'blog_name' => 'My Blog Name',
-	                'charset'   => 'utf-8'
-	                );
+		'ping_url'  => 'http://example.com/trackback/456',
+		'url'       => 'http://www.my-example.com/blog/entry/123',
+		'title'     => 'The Title of My Entry',
+		'excerpt'   => 'The entry content.',
+		'blog_name' => 'My Blog Name',
+		'charset'   => 'utf-8'
+	);
 
 	if ( ! $this->trackback->send($tb_data))
 	{
-	     echo $this->trackback->display_errors();
+		echo $this->trackback->display_errors();
 	}
 	else
 	{
-	     echo 'Trackback was sent!';
+		echo 'Trackback was sent!';
 	}
 
 Description of array data:
 
 -  **ping_url** - The URL of the site you are sending the Trackback to.
-   You can send Trackbacks to multiple URLs by separating each URL with
-   a comma.
+   You can send Trackbacks to multiple URLs by separating each URL with a comma.
 -  **url** - The URL to YOUR site where the weblog entry can be seen.
 -  **title** - The title of your weblog entry.
--  **excerpt** - The content of your weblog entry. Note: the Trackback
-   class will automatically send only the first 500 characters of your
-   entry. It will also strip all HTML.
+-  **excerpt** - The content of your weblog entry.
 -  **blog_name** - The name of your weblog.
--  **charset** - The character encoding your weblog is written in. If
-   omitted, UTF-8 will be used.
+-  **charset** - The character encoding your weblog is written in. If omitted, UTF-8 will be used.
 
-The Trackback sending function returns TRUE/FALSE (boolean) on success
+.. note:: the Trackback class will automatically send only the first 500 characters of your 
+	entry. It will also strip all HTML.
+
+The Trackback sending method returns TRUE/FALSE (boolean) on success
 or failure. If it fails, you can retrieve the error message using::
 
 	$this->trackback->display_errors();
@@ -107,16 +118,16 @@
 store them. Here is a basic prototype for such a table::
 
 	CREATE TABLE trackbacks (
-	 tb_id int(10) unsigned NOT NULL auto_increment,
-	 entry_id int(10) unsigned NOT NULL default 0,
-	 url varchar(200) NOT NULL,
-	 title varchar(100) NOT NULL,
-	 excerpt text NOT NULL,
-	 blog_name varchar(100) NOT NULL,
-	 tb_date int(10) NOT NULL,
-	 ip_address varchar(45) NOT NULL,
-	 PRIMARY KEY `tb_id` (`tb_id`),
-	 KEY `entry_id` (`entry_id`)
+		tb_id int(10) unsigned NOT NULL auto_increment,
+		entry_id int(10) unsigned NOT NULL default 0,
+		url varchar(200) NOT NULL,
+		title varchar(100) NOT NULL,
+		excerpt text NOT NULL,
+		blog_name varchar(100) NOT NULL,
+		tb_date int(10) NOT NULL,
+		ip_address varchar(45) NOT NULL,
+		PRIMARY KEY `tb_id` (`tb_id`),
+		KEY `entry_id` (`entry_id`)
 	);
 
 The Trackback specification only requires four pieces of information to
@@ -129,33 +140,31 @@
 
 Here is an example showing how you will receive and process a Trackback.
 The following code is intended for use within the controller function
-where you expect to receive Trackbacks.
-
-::
+where you expect to receive Trackbacks.::
 
 	$this->load->library('trackback');
 	$this->load->database();
 
 	if ($this->uri->segment(3) == FALSE)
 	{
-	    $this->trackback->send_error("Unable to determine the entry ID");
+		$this->trackback->send_error('Unable to determine the entry ID');
 	}
 
 	if ( ! $this->trackback->receive())
 	{
-	    $this->trackback->send_error("The Trackback did not contain valid data");
+		$this->trackback->send_error('The Trackback did not contain valid data');
 	}
 
 	$data = array(
-	                'tb_id'      => '',
-	                'entry_id'   => $this->uri->segment(3),
-	                'url'        => $this->trackback->data('url'),
-	                'title'      => $this->trackback->data('title'),
-	                'excerpt'    => $this->trackback->data('excerpt'),
-	                'blog_name'  => $this->trackback->data('blog_name'),
-	                'tb_date'    => time(),
-	                'ip_address' => $this->input->ip_address()
-	                );
+		'tb_id'      => '',
+		'entry_id'   => $this->uri->segment(3),
+		'url'        => $this->trackback->data('url'),
+		'title'      => $this->trackback->data('title'),
+		'excerpt'    => $this->trackback->data('excerpt'),
+		'blog_name'  => $this->trackback->data('blog_name'),
+		'tb_date'    => time(),
+		'ip_address' => $this->input->ip_address()
+	);
 
 	$sql = $this->db->insert_string('trackbacks', $data);
 	$this->db->query($sql);
@@ -199,3 +208,122 @@
 
 .. note:: The above code contains no data validation, which you are
 	encouraged to add.
+
+***************
+Class Reference
+***************
+
+.. class:: CI_Trackback
+
+	.. attribute:: $data = array('url' => '', 'title' => '', 'excerpt' => '', 'blog_name' => '', 'charset' => '')
+
+		Trackback data array.
+
+	.. attribute:: $convert_ascii = TRUE
+
+		Whether to convert high ASCII and MS Word characters to HTML entities.
+
+	.. method:: send($tb_data)
+
+		:param array $tb_data: trackback data
+		:returns: bool
+
+		Send trackback.
+
+	.. method:: receive()
+
+		:returns: bool
+
+		This method simply validates the incoming TB data, returning TRUE on success and FALSE on failure.
+		If the data is valid it is set to the ``$this->data`` array so that it can be inserted into a database.
+
+	.. method:: send_error([$message = 'Incomplete information')
+
+		:param string $message: error message
+		:returns: void
+
+		Responses to a trackback request with an error message.
+
+		.. note:: This method will terminate script execution.
+
+	.. method:: send_success()
+
+		:returns: void
+
+		Responses to a trackback request with a success message.
+
+		.. note:: This method will terminate script execution.
+
+	.. method:: data($item)
+
+		:param string $item: data key
+		:returns: string
+
+		Returns a single item from the reponse data array.
+
+	.. method:: process($url, $data)
+
+		:param string $url: target url
+		:param string $data: raw post data
+		:returns: bool
+
+		Opens a socket connection and passes the data to the server, returning TRUE on success and FALSE on failure.
+
+	.. method:: extract_urls($urls)
+
+		:param string $urls: comma-separated url list
+		:returns: string
+
+		This method lets multiple trackbacks to be sent. It takes a string of URLs (separated by comma or space) and puts each URL into an array.
+
+	.. method:: validate_url(&$url)
+
+		:param string $url: trackback url
+		:returns: void
+
+		Simply adds the *http://* prefix it it's not already present in the URL.
+
+	.. method:: get_id($url)
+
+		:param string $url: trackback url
+		:returns: string
+
+		Find and return a trackback URL's ID or FALSE on failure.
+
+	.. method:: convert_xml($str)
+
+		:param string $str: input string
+		:returns: string
+
+		Converts reserved XML characters to entities.
+
+	.. method:: limit_characters($str[, $n = 500[, $end_char = '&#8230;']])
+
+		:param string $str: input string
+		:param int $n: max characters number
+		:param string $end_char: character to put at end of string
+		:returns: string
+
+		Limits the string based on the character count. Will preserve complete words.
+
+	.. method:: convert_ascii($str)
+
+		:param string $str: input string
+		:returns: string
+
+		Converts high ASCII text and MS Word special characterss to HTML entities.
+
+	.. method:: set_error($msg)
+
+		:param string $msg: error message
+		:returns: void
+
+		Set an log an error message.
+
+	.. method:: display_errors([$open = '<p>'[, $close = '</p>']])
+
+		:param string $open: open tag
+		:param string $close: close tag
+		:returns: string
+
+		Returns error messages formatted in HTML or an empty string if there are no errors.
\ No newline at end of file
diff --git a/user_guide_src/source/libraries/typography.rst b/user_guide_src/source/libraries/typography.rst
index db3f227..f1a825d 100644
--- a/user_guide_src/source/libraries/typography.rst
+++ b/user_guide_src/source/libraries/typography.rst
@@ -2,104 +2,103 @@
 Typography Class
 ################
 
-The Typography Class provides functions that help you format text.
+The Typography Class provides methods that help you format text.
+
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
+**************************
+Using the Typography Class
+**************************
 
 Initializing the Class
 ======================
 
 Like most other classes in CodeIgniter, the Typography class is
-initialized in your controller using the $this->load->library function::
+initialized in your controller using the ``$this->load->library()`` method::
 
 	$this->load->library('typography');
 
-Once loaded, the Typography library object will be available using:
-$this->typography
+Once loaded, the Typography library object will be available using::
 
-auto_typography()
-==================
+	$this->typography
 
-Formats text so that it is semantically and typographically correct
-HTML. Takes a string as input and returns it with the following
-formatting:
+***************
+Class Reference
+***************
 
--  Surrounds paragraphs within <p></p> (looks for double line breaks to
-   identify paragraphs).
--  Single line breaks are converted to <br />, except those that appear
-   within <pre> tags.
--  Block level elements, like <div> tags, are not wrapped within
-   paragraphs, but their contained text is if it contains paragraphs.
--  Quotes are converted to correctly facing curly quote entities, except
-   those that appear within tags.
--  Apostrophes are converted to curly apostrophe entities.
--  Double dashes (either like -- this or like--this) are converted to
-   em—dashes.
--  Three consecutive periods either preceding or following a word are
-   converted to ellipsis…
--  Double spaces following sentences are converted to non-breaking
-   spaces to mimic double spacing.
+.. class:: CI_Typography
 
-Usage example::
+	.. attribute:: $protect_braced_quotes = FALSE
 
-	$string = $this->typography->auto_typography($string);
+		When using the Typography library in conjunction with the :doc:`Template Parser library <parser>`
+		it can often be desirable to protect single and double quotes within curly braces.
+		To enable this, set the ``protect_braced_quotes`` class property to TRUE.
 
-Parameters
-----------
+		Usage example::
 
-There is one optional parameters that determines whether the parser
-should reduce more then two consecutive line breaks down to two. Use
-boolean TRUE or FALSE.
+			$this->load->library('typography');
+			$this->typography->protect_braced_quotes = TRUE;
 
-By default the parser does not reduce line breaks. In other words, if no
-parameters are submitted, it is the same as doing this::
+	.. method auto_typography($str[, $reduce_linebreaks = FALSE])
 
-	$string = $this->typography->auto_typography($string, FALSE);
+		:param string $str: input string
+		:param bool $reduce_linebreaks: whether to reduce consequitive linebreaks
+		:returns: string
 
-.. note:: Typographic formatting can be processor intensive,
-	particularly if you have a lot of content being formatted. If you choose
-	to use this function you may want to consider :doc:`caching <../general/caching>`
-	your pages.
+		Formats text so that it is semantically and typographically correct HTML.
+		Takes a string as input and returns it with the following formatting:
 
-format_characters()
-====================
+		 -  Surrounds paragraphs within <p></p> (looks for double line breaks to identify paragraphs).
+		 -  Single line breaks are converted to <br />, except those that appear within <pre> tags.
+		 -  Block level elements, like <div> tags, are not wrapped within paragraphs, but their contained text is if it contains paragraphs.
+		 -  Quotes are converted to correctly facing curly quote entities, except those that appear within tags.
+		 -  Apostrophes are converted to curly apostrophe entities.
+		 -  Double dashes (either like -- this or like--this) are converted to em—dashes.
+		 -  Three consecutive periods either preceding or following a word are converted to ellipsis (…).
+		 -  Double spaces following sentences are converted to non-breaking spaces to mimic double spacing.
 
-This function is similar to the auto_typography function above, except
-that it only does character conversion:
+		Usage example::
 
--  Quotes are converted to correctly facing curly quote entities, except
-   those that appear within tags.
--  Apostrophes are converted to curly apostrophe entities.
--  Double dashes (either like -- this or like--this) are converted to
-   em—dashes.
--  Three consecutive periods either preceding or following a word are
-   converted to ellipsis…
--  Double spaces following sentences are converted to non-breaking
-   spaces to mimic double spacing.
+			$string = $this->typography->auto_typography($string);
 
-Usage example::
+		There is one optional parameter that determines whether the parser should reduce more then two consecutive line breaks down to two.
+		Pass boolean TRUE to enable reducing line breaks::
 
-	$string = $this->typography->format_characters($string);
+			$string = $this->typography->auto_typography($string, TRUE);
 
-nl2br_except_pre()
-====================
+		.. note:: Typographic formatting can be processor intensive, particularly if you have a lot of content being formatted.
+			If you choose to use this method you may want to consider :doc:`caching <../general/caching>` your pages.
 
-Converts newlines to <br /> tags unless they appear within <pre> tags.
-This function is identical to the native PHP nl2br() function, except
-that it ignores <pre> tags.
+	.. method:: format_characters($str)
 
-Usage example::
+		:param string $str: input string
+		:returns: string
 
-	$string = $this->typography->nl2br_except_pre($string);
+		This method is similar to ``auto_typography()`` above, except that it only does character conversion:
 
-protect_braced_quotes
-=======================
+		 -  Quotes are converted to correctly facing curly quote entities, except those that appear within tags.
+		 -  Apostrophes are converted to curly apostrophe entities.
+		 -  Double dashes (either like -- this or like--this) are converted to em—dashes.
+		 -  Three consecutive periods either preceding or following a word are converted to ellipsis (…).
+		 -  Double spaces following sentences are converted to non-breaking spaces to mimic double spacing.
 
-When using the Typography library in conjunction with the Template
-Parser library it can often be desirable to protect single and double
-quotes within curly braces. To enable this, set the
-protect_braced_quotes class property to TRUE.
+		Usage example::
 
-Usage example::
+			$string = $this->typography->format_characters($string);
 
-	$this->load->library('typography');
-	$this->typography->protect_braced_quotes = TRUE;
+	.. method:: nl2br_except_pre($str)
 
+		:param string $str: input string
+		:returns: string
+
+		Converts newlines to <br /> tags unless they appear within <pre> tags.
+		This method is identical to the native PHP :php:func:`nl2br()` function, except that it ignores <pre> tags.
+
+		Usage example::
+
+			$string = $this->typography->nl2br_except_pre($string);
\ No newline at end of file
diff --git a/user_guide_src/source/libraries/unit_testing.rst b/user_guide_src/source/libraries/unit_testing.rst
index 6bd91bf..2d4a27a 100644
--- a/user_guide_src/source/libraries/unit_testing.rst
+++ b/user_guide_src/source/libraries/unit_testing.rst
@@ -11,6 +11,13 @@
 full-blown test suite but rather a simple mechanism to evaluate your
 code to determine if it is producing the correct data type and result.
 
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
 Initializing the Class
 ======================
 
@@ -19,16 +26,15 @@
 
 	$this->load->library('unit_test');
 
-Once loaded, the Unit Test object will be available using: $this->unit
+Once loaded, the Unit Test object will be available using ``$this->unit``
 
 Running Tests
 =============
 
-Running a test involves supplying a test and an expected result to the
-following function:
+Running a test involves supplying a test and an expected result in the
+following way:
 
-$this->unit->run( test, expected result, 'test name', 'notes');
-===============================================================
+	$this->unit->run('test', 'expected result', 'test name', 'notes');
 
 Where test is the result of the code you wish to test, expected result
 is the data type you expect, test name is an optional name you can give
@@ -114,7 +120,7 @@
 If you would like to leave some testing in place in your scripts, but
 not have it run unless you need it, you can disable unit testing using::
 
-	$this->unit->active(FALSE)
+	$this->unit->active(FALSE);
 
 Unit Test Display
 =================
@@ -150,15 +156,82 @@
 
 	$str = '
 	<table border="0" cellpadding="4" cellspacing="1">
-	    {rows}
-	        <tr>
-	        <td>{item}</td>
-	        <td>{result}</td>
-	        </tr>
-	    {/rows}
+	{rows}
+		<tr>
+			<td>{item}</td>
+			<td>{result}</td>
+		</tr>
+	{/rows}
 	</table>';
 
 	$this->unit->set_template($str);
 
 .. note:: Your template must be declared **before** running the unit
 	test process.
+
+***************
+Class Reference
+***************
+
+.. class:: CI_Unit_test
+
+	.. method:: set_test_items($items)
+
+		:param array $items: List of visible test items
+		:returns: void
+
+		Sets a list of items that should be visible in tests.
+		Valid options are:
+
+		  - test_name
+		  - test_datatype
+		  - res_datatype
+		  - result
+		  - file
+		  - line
+		  - notes
+
+	.. method:: run($test[, $expected = TRUE[, $test_name = 'undefined'[, $notes = '']]])
+
+		:param mixed $test: Test data
+		:param mixed $expected: Expected result
+		:param string $test_name: Test name
+		:param string $notes: Any notes to be attached to the test
+		:returns: string
+
+		Runs unit tests.
+
+	.. method:: report([$result = array()])
+
+		:param array $result: Array containing tests results
+		:returns: string
+
+		Generates a report about already complete tests.
+
+	.. method:: use_strict([$state = TRUE])
+
+		:param bool $state: Strict state flag
+		:returns: void
+
+		Enables/disables strict type comparison in tests.
+
+	.. method:: active([$state = TRUE])
+
+		:param bool $state: Whether to enable testing
+		:returns: void
+
+		Enables/disables unit testing.
+
+	.. method:: result([$results = array()])
+
+		:param array $results: Tests results list
+		:returns: array
+
+		Returns raw tests results data.
+
+	.. method:: set_template($template)
+
+		:param string $template: Test result template
+		:returns: void
+
+		Sets the template for displaying tests results.
\ No newline at end of file
diff --git a/user_guide_src/source/libraries/uri.rst b/user_guide_src/source/libraries/uri.rst
index bb959b0..f0fa040 100644
--- a/user_guide_src/source/libraries/uri.rst
+++ b/user_guide_src/source/libraries/uri.rst
@@ -2,187 +2,219 @@
 URI Class
 #########
 
-The URI Class provides functions that help you retrieve information from
+The URI Class provides methods that help you retrieve information from
 your URI strings. If you use URI routing, you can also retrieve
 information about the re-routed segments.
 
 .. note:: This class is initialized automatically by the system so there
 	is no need to do it manually.
 
-$this->uri->segment(n)
-======================
+.. contents::
+  :local:
 
-Permits you to retrieve a specific segment. Where n is the segment
-number you wish to retrieve. Segments are numbered from left to right.
-For example, if your full URL is this::
+.. raw:: html
 
-	http://example.com/index.php/news/local/metro/crime_is_up
+  <div class="custom-index container"></div>
 
-The segment numbers would be this:
+***************
+Class Reference
+***************
 
-#. news
-#. local
-#. metro
-#. crime_is_up
+.. class:: CI_URI
 
-By default the function returns NULL if the segment does not
-exist. There is an optional second parameter that permits you to set
-your own default value if the segment is missing. For example, this
-would tell the function to return the number zero in the event of
-failure::
+	.. method:: segment($n[, $no_result = NULL])
 
-	$product_id = $this->uri->segment(3, 0);
+		:param int $n: Segment index number
+		:param mixed $no_result: What to return if the searched segment is not found
+		:returns: mixed
 
-It helps avoid having to write code like this::
+		Permits you to retrieve a specific segment. Where n is the segment
+		number you wish to retrieve. Segments are numbered from left to right.
+		For example, if your full URL is this::
 
-	if ($this->uri->segment(3) === FALSE)
-	{
-	    $product_id = 0;
-	}
-	else
-	{
-	    $product_id = $this->uri->segment(3);
-	}
+			http://example.com/index.php/news/local/metro/crime_is_up
 
-$this->uri->rsegment(n)
-=======================
+		The segment numbers would be this:
 
-This function is identical to the previous one, except that it lets you
-retrieve a specific segment from your re-routed URI in the event you are
-using CodeIgniter's :doc:`URI Routing <../general/routing>` feature.
+		#. news
+		#. local
+		#. metro
+		#. crime_is_up
 
-$this->uri->slash_segment(n)
-=============================
+		The optional second parameter defaults to NULL and allows you to set the return value
+		of this method when the requested URI segment is missing.
+		For example, this would tell the method to return the number zero in the event of failure::
 
-This function is almost identical to $this->uri->segment(), except it
-adds a trailing and/or leading slash based on the second parameter. If
-the parameter is not used, a trailing slash added. Examples::
+			$product_id = $this->uri->segment(3, 0);
 
-	$this->uri->slash_segment(3);
-	$this->uri->slash_segment(3, 'leading');
-	$this->uri->slash_segment(3, 'both');
+		It helps avoid having to write code like this::
 
-Returns:
+			if ($this->uri->segment(3) === FALSE)
+			{
+				$product_id = 0;
+			}
+			else
+			{
+				$product_id = $this->uri->segment(3);
+			}
 
-#. segment/
-#. /segment
-#. /segment/
+	.. method:: rsegment($n[, $no_result = NULL])
 
-$this->uri->slash_rsegment(n)
-==============================
+		:param int $n: Segment index number
+		:param mixed $no_result: What to return if the searched segment is not found
+		:returns: mixed
 
-This function is identical to the previous one, except that it lets you
-add slashes a specific segment from your re-routed URI in the event you
-are using CodeIgniter's :doc:`URI Routing <../general/routing>`
-feature.
+		This method is identical to ``segment()``, except that it lets you retrieve
+		a specific segment from your re-routed URI in the event you are
+		using CodeIgniter's :doc:`URI Routing <../general/routing>` feature.
 
-$this->uri->uri_to_assoc(n)
-=============================
+	.. method:: slash_segment($n[, $where = 'trailing'])
 
-This function lets you turn URI segments into and associative array of
-key/value pairs. Consider this URI::
+		:param int $n: Segment index number
+		:param string $where: Where to add the slash ('trailing' or 'leading')
+		:returns: string
 
-	index.php/user/search/name/joe/location/UK/gender/male
+		This method is almost identical to ``segment()``, except it
+		adds a trailing and/or leading slash based on the second parameter.
+		If the parameter is not used, a trailing slash added. Examples::
 
-Using this function you can turn the URI into an associative array with
-this prototype::
+			$this->uri->slash_segment(3);
+			$this->uri->slash_segment(3, 'leading');
+			$this->uri->slash_segment(3, 'both');
 
-	[array]
-	(
-	    'name' => 'joe'
-	    'location'	=> 'UK'
-	    'gender'	=> 'male'
-	)
+		Returns:
 
-The first parameter of the function lets you set an offset. By default
-it is set to 3 since your URI will normally contain a
-controller/function in the first and second segments. Example::
+		#. segment/
+		#. /segment
+		#. /segment/
 
-	$array = $this->uri->uri_to_assoc(3);
+	.. method:: slash_rsegment($n[, $where = 'trailing'])
 
-	echo $array['name'];
+		:param int $n: Segment index number
+		:param string $where: Where to add the slash ('trailing' or 'leading')
+		:returns: string
 
-The second parameter lets you set default key names, so that the array
-returned by the function will always contain expected indexes, even if
-missing from the URI. Example::
+		This method is identical to ``slash_segment()``, except that it lets you
+		add slashes a specific segment from your re-routed URI in the event you
+		are using CodeIgniter's :doc:`URI Routing <../general/routing>`
+		feature.
 
-	$default = array('name', 'gender', 'location', 'type', 'sort');
+	.. method:: uri_to_assoc([$n = 3[, $default = array()]])
 
-	$array = $this->uri->uri_to_assoc(3, $default);
+		:param int $n: Segment index number
+		:param array $default: Default values
+		:returns: array
 
-If the URI does not contain a value in your default, an array index will
-be set to that name, with a value of FALSE.
+		This method lets you turn URI segments into and associative array of
+		key/value pairs. Consider this URI::
 
-Lastly, if a corresponding value is not found for a given key (if there
-is an odd number of URI segments) the value will be set to FALSE
-(boolean).
+			index.php/user/search/name/joe/location/UK/gender/male
 
-$this->uri->ruri_to_assoc(n)
-==============================
+		Using this method you can turn the URI into an associative array with
+		this prototype::
 
-This function is identical to the previous one, except that it creates
-an associative array using the re-routed URI in the event you are using
-CodeIgniter's :doc:`URI Routing <../general/routing>` feature.
+			[array]
+			(
+				'name'		=> 'joe'
+				'location'	=> 'UK'
+				'gender'	=> 'male'
+			)
 
-$this->uri->assoc_to_uri()
-============================
+		The first parameter lets you set an offset, which defaults to 3 since your
+		URI will normally contain a controller/method pair in the first and second segments.
+		Example::
 
-Takes an associative array as input and generates a URI string from it.
-The array keys will be included in the string. Example::
+			$array = $this->uri->uri_to_assoc(3);
+			echo $array['name'];
 
-	$array = array('product' => 'shoes', 'size' => 'large', 'color' => 'red');
+		The second parameter lets you set default key names, so that the array
+		returned will always contain expected indexes, even if missing from the URI.
+		Example::
 
-	$str = $this->uri->assoc_to_uri($array);
+			$default = array('name', 'gender', 'location', 'type', 'sort');
+			$array = $this->uri->uri_to_assoc(3, $default);
 
-	// Produces: product/shoes/size/large/color/red
+		If the URI does not contain a value in your default, an array index will
+		be set to that name, with a value of NULL.
 
-$this->uri->uri_string()
-=========================
+		Lastly, if a corresponding value is not found for a given key (if there
+		is an odd number of URI segments) the value will be set to NULL.
 
-Returns a string with the complete URI. For example, if this is your
-full URL::
+	.. method:: ruri_to_assoc([$n = 3[, $default = array()]])
 
-	http://example.com/index.php/news/local/345
+		:param int $n: Segment index number
+		:param array $default: Default values
+		:returns: array
 
-The function would return this::
+		This method is identical to ``uri_to_assoc()``, except that it creates
+		an associative array using the re-routed URI in the event you are using
+		CodeIgniter's :doc:`URI Routing <../general/routing>` feature.
 
-	news/local/345
+	.. method:: assoc_to_uri($array)
 
-$this->uri->ruri_string()
-==========================
+		:param array $array: Input array of key/value pairs
+		:returns: string
 
-This function is identical to the previous one, except that it returns
-the re-routed URI in the event you are using CodeIgniter's :doc:`URI
-Routing <../general/routing>` feature.
+		Takes an associative array as input and generates a URI string from it.
+		The array keys will be included in the string. Example::
 
-$this->uri->total_segments()
-=============================
+			$array = array('product' => 'shoes', 'size' => 'large', 'color' => 'red');
+			$str = $this->uri->assoc_to_uri($array);
 
-Returns the total number of segments.
+			// Produces: product/shoes/size/large/color/red
 
-$this->uri->total_rsegments()
-==============================
+	.. method:: uri_string()
 
-This function is identical to the previous one, except that it returns
-the total number of segments in your re-routed URI in the event you are
-using CodeIgniter's :doc:`URI Routing <../general/routing>` feature.
+		:returns: string
 
-$this->uri->segment_array()
-============================
+		Returns a string with the complete URI. For example, if this is your full URL::
 
-Returns an array containing the URI segments. For example::
+			http://example.com/index.php/news/local/345
 
-	$segs = $this->uri->segment_array();
+		The method would return this::
 
-	foreach ($segs as $segment)
-	{
-	    echo $segment;
-	    echo '<br />';
-	}
+			news/local/345
 
-$this->uri->rsegment_array()
-=============================
+	.. method:: ruri_string()
 
-This function is identical to the previous one, except that it returns
-the array of segments in your re-routed URI in the event you are using
-CodeIgniter's :doc:`URI Routing <../general/routing>` feature.
+		:returns: string
+
+		This method is identical to ``uri_string()``, except that it returns
+		the re-routed URI in the event you are using CodeIgniter's :doc:`URI
+		Routing <../general/routing>` feature.
+
+	.. method:: total_segments()
+
+		:returns: int
+
+		Returns the total number of segments.
+
+	.. method:: total_rsegments()
+
+		:returns: int
+
+		This method is identical to ``total_segments()``, except that it returns
+		the total number of segments in your re-routed URI in the event you are
+		using CodeIgniter's :doc:`URI Routing <../general/routing>` feature.
+
+	.. method:: segment_array()
+
+		:returns: array
+
+		Returns an array containing the URI segments. For example::
+
+			$segs = $this->uri->segment_array();
+
+			foreach ($segs as $segment)
+			{
+				echo $segment;
+				echo '<br />';
+			}
+
+	.. method:: rsegment_array()
+
+		:returns: array
+
+		This method is identical to ``segment_array()``, except that it returns
+		the array of segments in your re-routed URI in the event you are using
+		CodeIgniter's :doc:`URI Routing <../general/routing>` feature.
\ No newline at end of file
diff --git a/user_guide_src/source/libraries/user_agent.rst b/user_guide_src/source/libraries/user_agent.rst
index 97abd22..af76cfa 100644
--- a/user_guide_src/source/libraries/user_agent.rst
+++ b/user_guide_src/source/libraries/user_agent.rst
@@ -7,6 +7,17 @@
 addition you can get referrer information as well as language and
 supported character-set information.
 
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
+**************************
+Using the User Agent Class
+**************************
+
 Initializing the Class
 ======================
 
@@ -15,7 +26,7 @@
 
 	$this->load->library('user_agent');
 
-Once loaded, the object will be available using: $this->agent
+Once loaded, the object will be available using: ``$this->agent``
 
 User Agent Definitions
 ======================
@@ -38,163 +49,185 @@
 
 	if ($this->agent->is_browser())
 	{
-	    $agent = $this->agent->browser().' '.$this->agent->version();
+		$agent = $this->agent->browser().' '.$this->agent->version();
 	}
 	elseif ($this->agent->is_robot())
 	{
-	    $agent = $this->agent->robot();
+		$agent = $this->agent->robot();
 	}
 	elseif ($this->agent->is_mobile())
 	{
-	    $agent = $this->agent->mobile();
+		$agent = $this->agent->mobile();
 	}
 	else
 	{
-	    $agent = 'Unidentified User Agent';
+		$agent = 'Unidentified User Agent';
 	}
 
 	echo $agent;
 
 	echo $this->agent->platform(); // Platform info (Windows, Linux, Mac, etc.)
 
-******************
-Function Reference
-******************
+***************
+Class Reference
+***************
 
-$this->agent->is_browser()
-===========================
+.. class: CI_User_agent
 
-Returns TRUE/FALSE (boolean) if the user agent is a known web browser.
+	.. method:: is_browser([$key = NULL])
 
-::
+		:param string $key: optional browser name
+		:returns: bool
 
-	if ($this->agent->is_browser('Safari'))
-	{
-	    echo 'You are using Safari.';
-	}
-	elseif ($this->agent->is_browser())
-	{
-	    echo 'You are using a browser.';
-	}
-	
+		Returns TRUE/FALSE (boolean) if the user agent is a known web browser.
+		::
 
-.. note:: The string "Safari" in this example is an array key in the
-	list of browser definitions. You can find this list in
-	application/config/user_agents.php if you want to add new browsers or
-	change the stings.
+			if ($this->agent->is_browser('Safari'))
+			{
+				echo 'You are using Safari.';
+			}
+			elseif ($this->agent->is_browser())
+			{
+				echo 'You are using a browser.';
+			}
 
-$this->agent->is_mobile()
-==========================
+		.. note:: The string "Safari" in this example is an array key in the list of browser definitions.
+			You can find this list in **application/config/user_agents.php** if you want to add new
+			browsers or change the stings.
 
-Returns TRUE/FALSE (boolean) if the user agent is a known mobile device.
+	.. method:: is_mobile([$key = NULL])
 
-::
+		:param string $key: optional mobile device name
+		:returns: bool
 
-	if ($this->agent->is_mobile('iphone'))
-	{
-	    $this->load->view('iphone/home');
-	}
-	elseif ($this->agent->is_mobile())
-	{
-	    $this->load->view('mobile/home');
-	}
-	else
-	{
-	    $this->load->view('web/home');
-	}
-	
+		Returns TRUE/FALSE (boolean) if the user agent is a known mobile device.
+		::
 
-$this->agent->is_robot()
-=========================
+			if ($this->agent->is_mobile('iphone'))
+			{
+				$this->load->view('iphone/home');
+			}
+			elseif ($this->agent->is_mobile())
+			{
+				$this->load->view('mobile/home');
+			}
+			else
+			{
+				$this->load->view('web/home');
+			}
 
-Returns TRUE/FALSE (boolean) if the user agent is a known robot.
+	.. method:: is_robot([$key = NULL])
 
-.. note:: The user agent library only contains the most common robot
-	definitions. It is not a complete list of bots. There are hundreds of
-	them so searching for each one would not be very efficient. If you find
-	that some bots that commonly visit your site are missing from the list
-	you can add them to your application/config/user_agents.php file.
+		:param string $key: optional robot name
+		:returns: bool
 
-$this->agent->is_referral()
-============================
+		Returns TRUE/FALSE (boolean) if the user agent is a known robot.
 
-Returns TRUE/FALSE (boolean) if the user agent was referred from another
-site.
+		.. note:: The user agent library only contains the most common robot definitions. It is not a complete list of bots.
+			There are hundreds of them so searching for each one would not be very efficient. If you find that some bots
+			that commonly visit your site are missing from the list you can add them to your
+			**application/config/user_agents.php** file.
 
-$this->agent->browser()
-=======================
+	.. method:: is_referral()
 
-Returns a string containing the name of the web browser viewing your
-site.
+		:returns: bool
 
-$this->agent->version()
-=======================
+		Returns TRUE/FALSE (boolean) if the user agent was referred from another site.
 
-Returns a string containing the version number of the web browser
-viewing your site.
+	.. method:: browser()
 
-$this->agent->mobile()
-======================
+		:returns: string
 
-Returns a string containing the name of the mobile device viewing your
-site.
+		Returns a string containing the name of the web browser viewing your site.
 
-$this->agent->robot()
-=====================
+	.. method:: version()
 
-Returns a string containing the name of the robot viewing your site.
+		:returns: string
 
-$this->agent->platform()
-========================
+		Returns a string containing the version number of the web browser viewing your site.
 
-Returns a string containing the platform viewing your site (Linux,
-Windows, OS X, etc.).
+	.. method:: mobile()
 
-$this->agent->referrer()
-========================
+		:returns: string
 
-The referrer, if the user agent was referred from another site.
-Typically you'll test for this as follows::
+		Returns a string containing the name of the mobile device viewing your site.
 
-	if ($this->agent->is_referral())
-	{
-	    echo $this->agent->referrer();
-	}
+	.. method:: robot()
 
-$this->agent->agent_string()
-=============================
+		:returns: string
 
-Returns a string containing the full user agent string. Typically it
-will be something like this::
+		Returns a string containing the name of the robot viewing your site.
 
-	Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2
+	.. method:: platform()
 
-$this->agent->accept_lang()
-============================
+		:returns: string
 
-Lets you determine if the user agent accepts a particular language.
-Example::
+		Returns a string containing the platform viewing your site (Linux, Windows, OS X, etc.).
 
-	if ($this->agent->accept_lang('en'))
-	{
-	    echo 'You accept English!';
-	}
+	.. method:: referrer()
 
-.. note:: This function is not typically very reliable since some
-	browsers do not provide language info, and even among those that do, it
-	is not always accurate.
+		:returns: string
 
-$this->agent->accept_charset()
-===============================
+		The referrer, if the user agent was referred from another site. Typically you'll test for this as follows::
 
-Lets you determine if the user agent accepts a particular character set.
-Example::
+			if ($this->agent->is_referral())
+			{
+				echo $this->agent->referrer();
+			}
 
-	if ($this->agent->accept_charset('utf-8'))
-	{
-	    echo 'You browser supports UTF-8!';
-	}
+	.. method:: agent_string()
 
-.. note:: This function is not typically very reliable since some
-	browsers do not provide character-set info, and even among those that
-	do, it is not always accurate.
+		:returns: string
+
+		Returns a string containing the full user agent string. Typically it will be something like this::
+
+			Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2
+
+	.. method:: accept_lang([$lang = 'en'])
+
+		:param string $lang: language key
+		:returns: bool
+
+		Lets you determine if the user agent accepts a particular language. Example::
+
+			if ($this->agent->accept_lang('en'))
+			{
+				echo 'You accept English!';
+			}
+
+		.. note:: This method is not typically very reliable since some	browsers do not provide language info,
+			and even among those that do, it is not always accurate.
+
+	.. method:: languages()
+
+		:returns: array
+
+		Returns an array of languages supported by the user agent.
+
+	.. method:: accept_charset([$charset = 'utf-8'])
+
+		:param string $charset: character set
+		:returns: bool
+
+		Lets you determine if the user agent accepts a particular character set. Example::
+
+			if ($this->agent->accept_charset('utf-8'))
+			{
+				echo 'You browser supports UTF-8!';
+			}
+
+		.. note:: This method is not typically very reliable since some browsers do not provide character-set info,
+			and even among those that do, it is not always accurate.
+
+	.. method:: charsets()
+
+		:returns: array
+
+		Returns an array of character sets accepted by the user agent.
+
+	.. method:: parse($string)
+
+		:param string $string: A custom user-agent string
+		:returns: void
+
+		Parses a custom user-agent string, different from the one reported by the current visitor.
\ No newline at end of file
diff --git a/user_guide_src/source/libraries/xmlrpc.rst b/user_guide_src/source/libraries/xmlrpc.rst
index d2d695e..d9b2dfb 100644
--- a/user_guide_src/source/libraries/xmlrpc.rst
+++ b/user_guide_src/source/libraries/xmlrpc.rst
@@ -5,6 +5,13 @@
 CodeIgniter's XML-RPC classes permit you to send requests to another
 server, or set up your own XML-RPC server to receive requests.
 
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
 ****************
 What is XML-RPC?
 ****************
@@ -24,8 +31,11 @@
 request. Once processed, the server will then send back a response
 message.
 
-For detailed specifications, you can visit the
-`XML-RPC <http://www.xmlrpc.com/>`_ site.
+For detailed specifications, you can visit the `XML-RPC <http://www.xmlrpc.com/>`_ site.
+
+***********************
+Using the XML-RPC Class
+***********************
 
 Initializing the Class
 ======================
@@ -123,6 +133,7 @@
 
 The `Data Types <#datatypes>`_ section below has a full list of data
 types.
+
 Creating an XML-RPC Server
 ==========================
 
@@ -425,102 +436,6 @@
 	$size = $parameters[1]['size'];
 	$shape = $parameters[1]['shape'];
 
-**************************
-XML-RPC Function Reference
-**************************
-
-$this->xmlrpc->server()
-=======================
-
-Sets the URL and port number of the server to which a request is to be
-sent::
-
-	$this->xmlrpc->server('http://www.sometimes.com/pings.php', 80);
-
-$this->xmlrpc->timeout()
-========================
-
-Set a time out period (in seconds) after which the request will be
-canceled::
-
-	$this->xmlrpc->timeout(6);
-
-$this->xmlrpc->method()
-=======================
-
-Sets the method that will be requested from the XML-RPC server::
-
-	$this->xmlrpc->method('method');
-
-Where method is the name of the method.
-
-$this->xmlrpc->request()
-========================
-
-Takes an array of data and builds request to be sent to XML-RPC server::
-
-	$request = array(array('My Photoblog', 'string'), 'http://www.yoursite.com/photoblog/');
-	$this->xmlrpc->request($request);
-
-$this->xmlrpc->send_request()
-==============================
-
-The request sending function. Returns boolean TRUE or FALSE based on
-success for failure, enabling it to be used conditionally.
-
-$this->xmlrpc->set_debug(TRUE);
-================================
-
-Enables debugging, which will display a variety of information and error
-data helpful during development.
-
-$this->xmlrpc->display_error()
-===============================
-
-Returns an error message as a string if your request failed for some
-reason.
-
-::
-
-	echo $this->xmlrpc->display_error();
-
-$this->xmlrpc->display_response()
-==================================
-
-Returns the response from the remote server once request is received.
-The response will typically be an associative array.
-
-::
-
-	$this->xmlrpc->display_response();
-
-$this->xmlrpc->send_error_message()
-=====================================
-
-This function lets you send an error message from your server to the
-client. First parameter is the error number while the second parameter
-is the error message.
-
-::
-
-	return $this->xmlrpc->send_error_message('123', 'Requested data not available');
-
-$this->xmlrpc->send_response()
-===============================
-
-Lets you send the response from your server to the client. An array of
-valid data values must be sent with this method.
-
-::
-
-	$response = array(
-	                 array(
-	                        'flerror' => array(FALSE, 'boolean'),
-	                        'message' => "Thanks for the ping!"
-	                     )
-	                 'struct');
-	return $this->xmlrpc->send_response($response);
-
 Data Types
 ==========
 
@@ -536,3 +451,122 @@
 -  *struct* (contains array of values)
 -  *array* (contains array of values)
 
+***************
+Class Reference
+***************
+
+.. class:: CI_Xmlrpc
+
+	.. method:: initialize([$config = array()])
+
+		:param array $config: configuration data
+		:returns: void
+
+		Initializes the XML-RPC library. Accepts an associative array containing your settings.
+
+	.. method:: server($url[, $port = 80[, $proxy = FALSE[, $proxy_port = 8080]]])
+
+		:param string $url: XML-RPC server URL
+		:param int $port: server port
+		:param string $proxy: optional proxy
+		:param int $proxy_port: proxy listening port
+		:returns: void
+
+		Sets the URL and port number of the server to which a request is to be sent::
+
+			$this->xmlrpc->server('http://www.sometimes.com/pings.php', 80);
+
+		Basic HTTP authentication is also supported, simply add it to the server URL::
+
+			$this->xmlrpc->server('http://user:pass@localhost/', 80);
+
+	.. method:: timeout($seconds = 5)
+
+		:param int $seconds: timeout in seconds
+		:returns: void
+
+		Set a time out period (in seconds) after which the request will be canceled::
+
+			$this->xmlrpc->timeout(6);
+
+	.. method:: method($function)
+
+		:param string $function: method name
+		:returns: void
+
+		Sets the method that will be requested from the XML-RPC server::
+
+			$this->xmlrpc->method('method');
+
+		Where method is the name of the method.
+
+	.. method:: request($incoming)
+
+		:param array $incoming: request data
+		:returns: void
+
+		Takes an array of data and builds request to be sent to XML-RPC server::
+
+			$request = array(array('My Photoblog', 'string'), 'http://www.yoursite.com/photoblog/');
+			$this->xmlrpc->request($request);
+
+	.. method:: send_request()
+
+		:returns: bool
+
+		The request sending method. Returns boolean TRUE or FALSE based on success for failure, enabling it to be used conditionally.
+
+	.. method set_debug($flag = TRUE)
+
+		:param bool $flag: debug status flag
+		:returns: void
+
+	Enables or disables debugging, which will display a variety of information and error data helpful during development.
+
+	.. method:: display_error()
+
+		:returns: string
+
+		Returns an error message as a string if your request failed for some reason.
+		::
+
+			echo $this->xmlrpc->display_error();
+
+	.. method:: display_response()
+
+		:returns: mixed
+
+		Returns the response from the remote server once request is received. The response will typically be an associative array.
+		::
+
+			$this->xmlrpc->display_response();
+
+	.. method:: send_error_message($number, $message)
+
+		:param int $number: error number
+		:param string $message: error message
+		:returns: object
+
+		This method lets you send an error message from your server to the client.
+		First parameter is the error number while the second parameter is the error message.
+		::
+
+			return $this->xmlrpc->send_error_message(123, 'Requested data not available');
+
+	.. method send_response($response)
+
+		:param array $response: response data
+		:returns: object
+
+		Lets you send the response from your server to the client. An array of valid data values must be sent with this method.
+		::
+
+			$response = array(
+				array(
+					'flerror' => array(FALSE, 'boolean'),
+					'message' => "Thanks for the ping!"
+				),
+				'struct'
+			);
+
+		return $this->xmlrpc->send_response($response);
diff --git a/user_guide_src/source/libraries/zip.rst b/user_guide_src/source/libraries/zip.rst
index c277182..535aa82 100644
--- a/user_guide_src/source/libraries/zip.rst
+++ b/user_guide_src/source/libraries/zip.rst
@@ -6,6 +6,17 @@
 archives. Archives can be downloaded to your desktop or saved to a
 directory.
 
+.. contents::
+  :local:
+
+.. raw:: html
+
+  <div class="custom-index container"></div>
+
+****************************
+Using the Zip Encoding Class
+****************************
+
 Initializing the Class
 ======================
 
@@ -35,174 +46,176 @@
 	// Download the file to your desktop. Name it "my_backup.zip"
 	$this->zip->download('my_backup.zip');
 
-******************
-Function Reference
-******************
+***************
+Class Reference
+***************
 
-$this->zip->add_data()
-=======================
+.. class:: CI_Zip
 
-Permits you to add data to the Zip archive. The first parameter must
-contain the name you would like given to the file, the second parameter
-must contain the file data as a string::
+	.. method:: add_data($filepath[, $data = NULL])
 
-	$name = 'my_bio.txt';
-	$data = 'I was born in an elevator...';
+		:param mixed $filepath: a single file path or an array of file => data pairs
+		:param array $data: single file contents
+		:returns: void
 
-	$this->zip->add_data($name, $data);
+		Adds data to the Zip archive. Can work both in single and multiple files mode.
 
-You are allowed multiple calls to this function in order to add several
-files to your archive. Example::
+		When adding a single file, the first parameter must contain the name you would like given to the file and the second must contain the file contents::
 
-	$name = 'mydata1.txt';
-	$data = 'A Data String!';
-	$this->zip->add_data($name, $data);
+			$name = 'mydata1.txt';
+			$data = 'A Data String!';
+			$this->zip->add_data($name, $data);
 
-	$name = 'mydata2.txt';
-	$data = 'Another Data String!';
-	$this->zip->add_data($name, $data);
+			$name = 'mydata2.txt';
+			$data = 'Another Data String!';
+			$this->zip->add_data($name, $data);
+			
+		When adding multiple files, the first parameter must contain *file => contents* pairs and the second parameter is ignored::
 
-Or you can pass multiple files using an array::
+			$data = array(
+				'mydata1.txt' => 'A Data String!',
+				'mydata2.txt' => 'Another Data String!'
+			);
 
-	$data = array(
-	                'mydata1.txt' => 'A Data String!',
-	                'mydata2.txt' => 'Another Data String!'
-	            );
+			$this->zip->add_data($data);
 
-	$this->zip->add_data($data);
+		If you would like your compressed data organized into sub-directories, simply include the path as part of the filename(s)::
 
-	$this->zip->download('my_backup.zip');
+			$name = 'personal/my_bio.txt';
+			$data = 'I was born in an elevator...';
 
-If you would like your compressed data organized into sub-folders,
-include the path as part of the filename::
+			$this->zip->add_data($name, $data);
 
-	$name = 'personal/my_bio.txt';
-	$data = 'I was born in an elevator...';
+		The above example will place my_bio.txt inside a folder called personal.
 
-	$this->zip->add_data($name, $data);
+	.. method:: add_dir($directory)
 
-The above example will place my_bio.txt inside a folder called
-personal.
+		:param mixed $directory: string directory name or an array of multiple directories
+		:returns: void
 
-$this->zip->add_dir()
-======================
+		Permits you to add a directory. Usually this method is unnecessary since you can place your data into directories when using
+		``$this->zip->add_data()``, but if you would like to create an empty directory you can do so::
 
-Permits you to add a directory. Usually this function is unnecessary
-since you can place your data into folders when using
-$this->zip->add_data(), but if you would like to create an empty folder
-you can do so. Example::
+			$this->zip->add_dir('myfolder'); // Creates a directory called "myfolder"
 
-	$this->zip->add_dir('myfolder'); // Creates a folder called "myfolder"
+	.. method:: read_file($path[, $archive_filepath = FALSE])
 
-$this->zip->read_file()
-========================
+		:param string $path: Path to file
+		:param mixed $archive_filepath: New file name/path (string) or (boolean) whether to maintain the original filepath
+		:returns: bool
 
-Permits you to compress a file that already exists somewhere on your
-server. Supply a file path and the zip class will read it and add it to
-the archive::
+		Permits you to compress a file that already exists somewhere on your server.
+		Supply a file path and the zip class will read it and add it to the archive::
 
-	$path = '/path/to/photo.jpg';
+			$path = '/path/to/photo.jpg';
 
-	$this->zip->read_file($path); 
+			$this->zip->read_file($path); 
 
-	// Download the file to your desktop. Name it "my_backup.zip"
-	$this->zip->download('my_backup.zip');
+			// Download the file to your desktop. Name it "my_backup.zip"
+			$this->zip->download('my_backup.zip');
 
-If you would like the Zip archive to maintain the directory structure of
-the file in it, pass TRUE (boolean) in the second parameter. Example::
+		If you would like the Zip archive to maintain the directory structure of
+		the file in it, pass TRUE (boolean) in the second parameter. Example::
 
-	$path = '/path/to/photo.jpg';
+			$path = '/path/to/photo.jpg';
 
-	$this->zip->read_file($path, TRUE); 
+			$this->zip->read_file($path, TRUE); 
 
-	// Download the file to your desktop. Name it "my_backup.zip"
-	$this->zip->download('my_backup.zip');
+			// Download the file to your desktop. Name it "my_backup.zip"
+			$this->zip->download('my_backup.zip');
 
-In the above example, photo.jpg will be placed inside two folders:
-path/to/
+		In the above example, photo.jpg will be placed into the *path/to/* directory.
 
-$this->zip->read_dir()
-=======================
+		You can also specify a new name (path included) for the added file on the fly::
 
-Permits you to compress a folder (and its contents) that already exists
-somewhere on your server. Supply a file path to the directory and the
-zip class will recursively read it and recreate it as a Zip archive. All
-files contained within the supplied path will be encoded, as will any
-sub-folders contained within it. Example::
+			$path = '/path/to/photo.jpg';
+			$new_path = '/new/path/some_photo.jpg';
 
-	$path = '/path/to/your/directory/';
+			$this->zip->read_file($path, $new_path);
 
-	$this->zip->read_dir($path); 
+			// Download ZIP archive containing /new/path/some_photo.jpg
+			$this->zip->download('my_archive.zip');
 
-	// Download the file to your desktop. Name it "my_backup.zip"
-	$this->zip->download('my_backup.zip');
+	.. method:: read_dir($path[, $preserve_filepath = TRUE[, $root_path = NULL]])
 
-By default the Zip archive will place all directories listed in the
-first parameter inside the zip. If you want the tree preceding the
-target folder to be ignored you can pass FALSE (boolean) in the second
-parameter. Example::
+		:param string $path: path to directory
+		:param bool $preserve_filepath: whether to maintain the original path
+		:param string $root_path: part of the path to exclude from the archive directory
+		:returns: bool
 
-	$path = '/path/to/your/directory/';
+		Permits you to compress a directory (and its contents) that already exists somewhere on your server.
+		Supply a path to the directory and the zip class will recursively read and recreate it as a Zip archive.
+		All files contained within the supplied path will be encoded, as will any sub-directories contained within it. Example::
 
-	$this->zip->read_dir($path, FALSE);
+			$path = '/path/to/your/directory/';
 
-This will create a ZIP with the folder "directory" inside, then all
-sub-folders stored correctly inside that, but will not include the
-folders /path/to/your.
+			$this->zip->read_dir($path); 
 
-$this->zip->archive()
-=====================
+			// Download the file to your desktop. Name it "my_backup.zip"
+			$this->zip->download('my_backup.zip');
 
-Writes the Zip-encoded file to a directory on your server. Submit a
-valid server path ending in the file name. Make sure the directory is
-writable (666 or 777 is usually OK). Example::
+		By default the Zip archive will place all directories listed in the first parameter inside the zip.
+		If you want the tree preceding the target directory to be ignored you can pass FALSE (boolean) in the second parameter. Example::
 
-	$this->zip->archive('/path/to/folder/myarchive.zip'); // Creates a file named myarchive.zip
+			$path = '/path/to/your/directory/';
 
-$this->zip->download()
-======================
+			$this->zip->read_dir($path, FALSE);
 
-Causes the Zip file to be downloaded from your server. The function must
-be passed the name you would like the zip file called. Example::
+		This will create a ZIP with a directory named "directory" inside, then all sub-directories stored correctly inside that, but will not include the
+		*/path/to/your* part of the path.
 
-	$this->zip->download('latest_stuff.zip'); // File will be named "latest_stuff.zip"
+	.. method:: archive($filepath)
 
-.. note:: Do not display any data in the controller in which you call
-	this function since it sends various server headers that cause the
-	download to happen and the file to be treated as binary.
+		:param string $filepath: path to target zip archive
+		:returns: bool
 
-$this->zip->get_zip()
-======================
+		Writes the Zip-encoded file to a directory on your server. Submit a valid server path ending in the file name.
+		Make sure the directory is writable (660 or 666 is usually OK). Example::
 
-Returns the Zip-compressed file data. Generally you will not need this
-function unless you want to do something unique with the data. Example::
+			$this->zip->archive('/path/to/folder/myarchive.zip'); // Creates a file named myarchive.zip
 
-	$name = 'my_bio.txt';
-	$data = 'I was born in an elevator...';
+	.. method:: download($filename = 'backup.zip')
 
-	$this->zip->add_data($name, $data);
+		:param string $filename: the archive file name
+		:returns: void
 
-	$zip_file = $this->zip->get_zip();
+		Causes the Zip file to be downloaded from your server. You must pass the name you would like the zip file called. Example::
 
-$this->zip->clear_data()
-=========================
+			$this->zip->download('latest_stuff.zip'); // File will be named "latest_stuff.zip"
 
-The Zip class caches your zip data so that it doesn't need to recompile
-the Zip archive for each function you use above. If, however, you need
-to create multiple Zips, each with different data, you can clear the
-cache between calls. Example::
+		.. note:: Do not display any data in the controller in which you call
+			this method since it sends various server headers that cause the
+			download to happen and the file to be treated as binary.
 
-	$name = 'my_bio.txt';
-	$data = 'I was born in an elevator...';
+	.. method:: get_zip()
 
-	$this->zip->add_data($name, $data);
-	$zip_file = $this->zip->get_zip();
+		:returns: string
 
-	$this->zip->clear_data(); 
+		Returns the Zip-compressed file data. Generally you will not need this method unless you want to do something unique with the data. Example::
 
-	$name = 'photo.jpg';
-	$this->zip->read_file("/path/to/photo.jpg"); // Read the file's contents
+			$name = 'my_bio.txt';
+			$data = 'I was born in an elevator...';
 
+			$this->zip->add_data($name, $data);
 
-	$this->zip->download('myphotos.zip');
+			$zip_file = $this->zip->get_zip();
 
+	.. method:: clear_data()
+
+		:returns: void
+
+		The Zip class caches your zip data so that it doesn't need to recompile the Zip archive for each method you use above.
+		If, however, you need to create multiple Zip archives, each with different data, you can clear the cache between calls. Example::
+
+			$name = 'my_bio.txt';
+			$data = 'I was born in an elevator...';
+
+			$this->zip->add_data($name, $data);
+			$zip_file = $this->zip->get_zip();
+
+			$this->zip->clear_data(); 
+
+			$name = 'photo.jpg';
+			$this->zip->read_file("/path/to/photo.jpg"); // Read the file's contents
+
+			$this->zip->download('myphotos.zip');
\ No newline at end of file
